Laravel:删除所有不在数组中的记录

Clé*_*igo 6 datepicker laravel eloquent laravel-5

我的视图中有一个日期选择器日历,基本上我需要将所选日期(我在ajax中发送)与BoxDeliveryDate模型(只有一个名为"date"的列)同步.

所以在我的控制器中,我能够编写一个非常好的方法来创建一个新记录,如果所选日期尚未存储在数据库中,如下所示:

foreach (Request::get('dates') as $date) {
        $date_formated = date('Y-m-d', strtotime($date));
        BoxDeliveryDate::firstOrCreate(['date'=>$date_formated]);
    }
Run Code Online (Sandbox Code Playgroud)

现在,如果用户在日期选择器中取消选择一个日期,稍后再进行同步,我需要从数据库中删除它.

在Laravel有一个很好的方法吗?换句话说,要删除不在我的表中的每条记录Request::get('dates')

此外,我搜索了一种简单的方法,只用一种方法同步一切,但找不到任何东西.

谢谢你的帮助!

luk*_*ter 12

你可以用whereNotIn()它:

BoxDeliveryDate::whereNotIn('date', Request::get('dates'))->delete();
Run Code Online (Sandbox Code Playgroud)

请注意,这不会触发任何模型事件,也不会与软删除一起使用.此外,根据dates您的格式,您可能必须格式化数组,然后再将其传递给whereNotIn().

我也相信它应该是,Request::input('dates')但实际上两者都有可能......