如何在 Laravel 中为数据透视表分配值时使用 saveMany?

rap*_*dko 1 laravel laravel-5

我在 Laravel 中与数据透视表建立了多对多关系,该数据透视表将产品和订单与带有数量数据透视值的 order_product 表连接起来。

现在我可以使用以下命令创建订单并在循环中添加每个产品:

foreach($products as $product){
    $order->products()->save($product,["quantity" => 3]);
}
Run Code Online (Sandbox Code Playgroud)

但是,由于我必须创建包含数百种产品的条目,因此为每个产品访问数据库对我来说似乎并不理想,所以我尝试使用这个:

$order->products()->saveMany([$product1,$product2,$product3]);
Run Code Online (Sandbox Code Playgroud)

我的问题是:在第二个示例中,如何使用 saveMany 设置每个产品的主值数量?

ElC*_*bra 5

您应该使用 Attach 代替。saveMany 用于没有数据透视表的一对多关系。如果您有数据透视表,那么它是多对多关系。然后代码看起来像这样:

$data = [];
foreach ($products as $product) {
   $data[$product->id] = ['quantity' => 3];
}
$order->products()->attach($data);
Run Code Online (Sandbox Code Playgroud)

文档: https: //laravel.com/docs/5.5/eloquent-relationships

  • `saveMany()` 绝对可以与多对多关系和数据透视表一起使用。对于@HarlanGray,是的,解决方案与您所描述的类似。`saveMany()` 接受一个可选的第二个参数,它是一个_关联数组的数组_。父数组中的元素数量必须与保存的模型数量相匹配,因此对于给出的示例,它将是: `...->saveMany([$prod1, $prod2], [['quantity' => 1], ['数量' => 3]])`。这将在数​​据透视表上存储数量为 1 的产品 1,以及数量为 3 的产品 2。 (3认同)