首页 > 解决方案 > 具有多个条件的 laravel 查询更新

问题描述

我有一个名为列的列flag,我想更新它,如果值是1null如果值是null到目前为止1很容易更新此列,但问题是我将多个数据发送到控制器,而不仅仅是一个。

代码

public function flagmultiplemessage(Request $request){
  $ids = $request->input('ids');
  DB::table('messages')->whereIn('id', $ids)
  ->whereNotNull('messages.flag')->update(['flag' => null])
  ->whereNull('messages.flag')->update(['flag' => '1']);
}

上面的功能我得到:

message Call to a member function whereNull() on integer

dd

上面的代码是这样的:

ids = [11, 12, 3]
database = [
  11->flag = 1,
  12->flag = null,
  3->flag = 1,
]

上面代码的结果最改变了我的数据库,例如:

database = [
  11->flag = null,
  12->flag = 1,
  3->flag = null,
]

知道为什么我会出错吗?

标签: phplaravel

解决方案


错误的主要原因是该update()方法不可链接

或者,您可以使用 mysql Case 语句在一个查询中进行更新。

public function flagmultiplemessage(Request $request) {
    $ids = $request->input('ids');
    DB::table('messages')->whereIn('id', $ids)
        ->update(['flag' => DB::raw('case when flag is null then 1 else null end') ]);
}

推荐阅读