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

时间:2015-04-08 09:22:35

标签: laravel datepicker eloquent laravel-5

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

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

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

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

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

中的表格的每条记录

另外,我搜索了一种只用一种方法同步所有内容的简单方法,但无法找到任何方法。

感谢您的帮助!

3 个答案:

答案 0 :(得分:12)

您可以使用whereNotIn()

BoxDeliveryDate::whereNotIn('date', Request::get('dates'))->delete();

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

另外我认为它应该是Request::input('dates'),但实际上两者都有效......

答案 1 :(得分:0)

我强烈推荐使用软删除特征(内置于Laravel中),如果你的大量删除!

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

答案 2 :(得分:0)

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