我的视图中有一个日期选择器日历,基本上我需要将所选日期(我在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')
?
另外,我搜索了一种只用一种方法同步所有内容的简单方法,但无法找到任何方法。
感谢您的帮助!
答案 0 :(得分:12)
您可以使用whereNotIn()
:
BoxDeliveryDate::whereNotIn('date', Request::get('dates'))->delete();
请注意,这不会触发任何模型事件,也不会与软删除一起使用。此外,根据dates
的格式,您可能必须先格式化数组,然后再将其传递给whereNotIn()
。
另外我认为它应该是Request::input('dates')
,但实际上两者都有效......
答案 1 :(得分:0)
我强烈推荐使用软删除特征(内置于Laravel中),如果你的大量删除!
答案 2 :(得分:0)
$this->model->whereNotIn('id', $ids)->delete();