首页 > 解决方案 > 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 列。即使它现在应该只更新过去的那些。

我没有收到错误消息

标签: phplaravel

解决方案


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被从外观返回的值替换。

编辑:使代码更易于阅读。

有关 where 子句的更多信息


推荐阅读