php - 具有多个条件的 laravel 查询更新
问题描述
我有一个名为列的列flag
,我想更新它,如果值是1
,null
如果值是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,
]
知道为什么我会出错吗?
解决方案
错误的主要原因是该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') ]);
}