我想要一个帮助,我需要使用行ID更新多行。
$sortable=$request->sortable;
foreach ($sortable as $key => $id) {
Category::where('id','=',$id)->update(['sort_order' => $key+1]);
}
我觉得这种方法不可行,因为它会多次更新。 我想在一次更新中做同样的事情。
sortable中的值是: 0:" 2" 1:" 1" 2:" 4" 3:" 3" 4:" 5"
答案 0 :(得分:2)
在您的情况下,在一个查询中无法执行此操作,因为您为特定ID分配了唯一值“sort_order”。仅当具有给定ID的所有行应获得相同的“sort_order”值时,才能执行一个查询。但是,您可以使用事务开始改进查询。它将带来两个好处:
演示解决方案的Laravel代码如下:
\DB::transaction(function () use ($sortable) {
foreach ($sortable as $key => $id) {
Category::where('id','=',$id)->update(['sort_order' => $key+1]);
}
});
答案 1 :(得分:0)
问题在于使用每个循环来更新类别的每一行,因此这将很慢。相反,你可以做的是你可以使用laravel雄辩的方法whereIn。
Category::whereIn('id', $ids)->update(['sort_order' => 'do whatever you feel like updating']);
确保$ ids是您的ID数组。