Laravel更新多条记录

时间:2016-09-01 08:53:38

标签: php laravel

我想要一个帮助,我需要使用行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"

2 个答案:

答案 0 :(得分:2)

在您的情况下,在一个查询中无法执行此操作,因为您为特定ID分配了唯一值“sort_order”。仅当具有给定ID的所有行应获得相同的“sort_order”值时,才能执行一个查询。但是,您可以使用事务开始改进查询。它将带来两个好处:

  1. 表格中的数据将保持一致。全部更新或全部更新。
  2. 如果您在表格中的'sort_order'字段中使用它们的索引将在事务结束时刷新一次。
  3. 演示解决方案的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数组。