【问题标题】:How To Bulk Update Pivot Table For Same Attributes In Laravel Many To Many如何批量更新 Laravel 中相同属性的数据透视表多对多
【发布时间】:2020-09-02 11:45:12
【问题描述】:

我刚刚发现,当我使用 sync() 方法从多表更新数据透视表时,它正在执行多个查询。

在我的情况下,我只是尝试更新所有相关数据透视表记录的相同属性。 这是我的脚本:

foreach ($serials as $serial) {
    $newSerials[$serial['id']] = ['warehouse_id' => 1];
} 
$record->serials()->sync($newSerials)

是否有任何其他解决方案可以在 laravel 中使用 Eloquent 方式仅在一次查询中更新数据透视表?

我很确定 Query Builder 可以处理这个问题,但我需要知道的是 Eloquent 方式,它可能可以与 sync() 方法结合使用,因为我已经在大多数类似的情况下实现了 sync()在我的项目中。

【问题讨论】:

    标签: php laravel eloquent laravel-6 laravel-7


    【解决方案1】:

    是的,您可以使用 newPivotQuery() 使查询直接在数据透视表上运行, 您应该准备要添加的数组,根据您的数据透视字段名称为其提供键值对,例如:

    foreach ($serials as $serial) {
        $newSerials[] = 
    ['serials_id'=>$serial->id,'record_id'=>$record->id,'warehouse_id' => 1];
    } 
    $record->serials()->newPivotQuery()->insert($newSerials);
    

    还有另一种方法,您可以通过从数据透视表继承来为数据透视表创建模型,更多详细信息请参见: https://laravel.com/docs/7.x/eloquent-relationships#defining-custom-intermediate-table-models

    我必须注意,这段代码插入 $newSerials,而不是更新它们,如果你想更新记录,方法 sync() 是你最好的选择

    【讨论】:

      猜你喜欢
      • 2016-08-16
      • 2017-04-11
      • 1970-01-01
      • 2021-04-28
      • 2021-10-08
      • 1970-01-01
      • 2016-03-29
      • 2019-03-25
      • 2019-02-27
      相关资源
      最近更新 更多