php - Laravel where 在控制器的更新语句中
问题描述
我的控制器中有这个功能:
foreach($models as $model) {
if ($model->EindDatum < Carbon::now() && $model->email_send == 0) {
DB::table('SSL')->where('userID', Auth::id())->update(['email_send' => 1]);
$model->user()->first()->notify(new \App\Notifications\TaksComplete);
}
}
现在我想将更新语句更改为:
DB::table('SSL')->where('userID', Auth::id(), 'EindDatum' < Carbon::now())->update(['email_send' => 1]);
但这不起作用..它在我的where语句中,但我不知道我做错了什么?
但这仍然会更新我数据库中的所有 email_send 列。即使它现在应该只更新过去的那些。
我没有收到错误消息
解决方案
where 语句不能这样工作
->where('userID', Auth::id(), 'EindDatum' < Carbon::now())
问题是 where 子句不知道如何处理您的表达式。
你需要像这样更新你的代码
DB::table('SSL')
->where('userID', Auth::id())
->where('EindDatum', '<', Carbon::now())
->update(['email_send' => 1]);
结果将是
Where Userid = Auth::id() AND EindDatum < Carbon::now()
WhereAuth::id()
和Carbon::now
被从外观返回的值替换。
编辑:使代码更易于阅读。
推荐阅读
- python - 从多个文本文件中读取一定数量的单词并保存为新文件
- android - 实现深色主题
- javascript - 日期选择器不工作(ASP.NET MVC)
- java - 重用同一个对象变量来创建多个对象
- java - 电报 Javabot。设置 webhook
- python - 如何正确使用范围 https://www.googleapis.com/auth/drive.file
- python - 如何使用卡方检验从文档中计算关键术语?
- android - 底部导航栏不显示图标或文本
- ruby-on-rails - Ruby on Rails - 显示具有不同内容的相同模式
- python - 如何在 Python 中绘制多个时间序列