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)!

http://laravel.com/docs/4.2/eloquent#soft-deleting

$this->model->whereNotIn('id', $ids)->delete();