Laravel : 删除所有不在数组中的记录
Laravel : Delete all records that are not in array
我的视图中有一个日期选择器日历,基本上我需要将 selected 日期(我在 ajax 中发送)与 BoxDeliveryDate 模型(只有一列名为"date").
因此,在我的控制器中,我能够编写一个非常好的方法,仅在 selected 日期尚未存储在数据库中时才创建新记录,如下所示:
foreach (Request::get('dates') as $date) {
$date_formated = date('Y-m-d', strtotime($date));
BoxDeliveryDate::firstOrCreate(['date'=>$date_formated]);
}
现在,如果用户删除select日期选择器中的一个日期,稍后再同步,我需要将其从数据库中删除。
在 Laravel 中有没有好的方法来做到这一点?换句话说,要删除 table 中不在我的 Request::get('dates')
?
中的每条记录
此外,我搜索了一种仅用一种方法同步所有内容的简单方法,但找不到任何东西。
感谢您的帮助!
你可以使用 whereNotIn()
:
BoxDeliveryDate::whereNotIn('date', Request::get('dates'))->delete();
请注意,这不会触发任何模型事件,也不会与软删除一起使用。此外,根据 dates
的格式,您可能必须在将数组传递给 whereNotIn()
.
之前对其进行格式化
我也认为它应该是 Request::input('dates')
但有可能两者都有效...
如果您要进行批量删除,我强烈建议您使用软删除特性(内置于 Laravel)!
$this->model->whereNotIn('id', $ids)->delete();
我的视图中有一个日期选择器日历,基本上我需要将 selected 日期(我在 ajax 中发送)与 BoxDeliveryDate 模型(只有一列名为"date").
因此,在我的控制器中,我能够编写一个非常好的方法,仅在 selected 日期尚未存储在数据库中时才创建新记录,如下所示:
foreach (Request::get('dates') as $date) {
$date_formated = date('Y-m-d', strtotime($date));
BoxDeliveryDate::firstOrCreate(['date'=>$date_formated]);
}
现在,如果用户删除select日期选择器中的一个日期,稍后再同步,我需要将其从数据库中删除。
在 Laravel 中有没有好的方法来做到这一点?换句话说,要删除 table 中不在我的 Request::get('dates')
?
此外,我搜索了一种仅用一种方法同步所有内容的简单方法,但找不到任何东西。
感谢您的帮助!
你可以使用 whereNotIn()
:
BoxDeliveryDate::whereNotIn('date', Request::get('dates'))->delete();
请注意,这不会触发任何模型事件,也不会与软删除一起使用。此外,根据 dates
的格式,您可能必须在将数组传递给 whereNotIn()
.
我也认为它应该是 Request::input('dates')
但有可能两者都有效...
如果您要进行批量删除,我强烈建议您使用软删除特性(内置于 Laravel)!
$this->model->whereNotIn('id', $ids)->delete();