我有一张桌子,上面有一群动物的名字。
它看起来像这样:
假设您要更新组的数据。
group_id
= 2
的记录中,quantity
从2
变为1
。group_id
= 3
的记录中,different_aviaries
从false
变为true
。group_id
= 4
的记录中,group_name
更改为null
,数量更改为0
。结果应该是这样的:
如何在单个请求中完成?
P.S我大大简化了示例中的表格。实际上,可能有必要一次更新40条记录。此外,示例5的表中的列实际上为14。
答案 0 :(得分:0)
您可以使用Laravel Batch package。从自述文件:
use App\Models\User; $userInstance = new User; $value = [ [ 'id' => 1, 'status' => 'active', 'nickname' => 'Mohammad' ] , [ 'id' => 5, 'status' => 'deactive', 'date' => Carbon::now() ] , ]; $index = 'id'; Batch::update($userInstance, $value, $index);
您可以轻松地对其进行调整以解决您的问题。
答案 1 :(得分:0)
是的,可以在本机SQL中完成。但是,无论是使用ORM还是本机,这都是一个坏主意,尤其是40行14列的情况。如果这是一次操作,则只需编写各个更新。这将是一个更安全的选择,因为随着此错误的增加,发生错误的可能性将大大增加。如果不是一次操作,则没有什么可以提前预测这种可变性。所以每一个都变成一次性的东西。
但这是可以完成的;只是不要:
update animal_groups
set quantity = case when group_id = 2 then 1
when group_id = 4 then 0
else quantity
end
, different_aviaries = case when group_id = 3 then true
else different_aviaries
end
, group_name = case when group_id = 4 then null
else group_name
end
where group_id in (2,3,4);
请注意,数量更新必须同时考虑这两个值的更改,因为列名只能在语句中为一次“左值”。