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

如何在向Laravel中的数据透视表分配值时使用saveMany?,laravel,laravel-5,Laravel,Laravel 5,在laravel中,我有一个多对多关系,一个数据透视表将产品和订单与一个数据透视值为Quantity的order_产品表连接起来 现在,我可以创建订单并使用以下命令将每个产品添加到循环中: foreach($products as $product){ $order->products()->save($product,["quantity" => 3]); } 但是,由于我必须创建包含数百种产品的条目,对我来说,为每种产品访问数据库似乎并不理想,因此我尝试使用以下方

在laravel中,我有一个多对多关系,一个数据透视表将产品和订单与一个数据透视值为Quantity的order_产品表连接起来

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

foreach($products as $product){
    $order->products()->save($product,["quantity" => 3]);
}
但是,由于我必须创建包含数百种产品的条目,对我来说,为每种产品访问数据库似乎并不理想,因此我尝试使用以下方法:

$order->products()->saveMany([$product1,$product2,$product3]);

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

您应该使用attach。saveMany用于没有透视表的一对多关系。如果您有透视表,它是多对多关系。然后代码如下所示:

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

文档:

此解决方案假定产品已保存。有没有一个解决方案,我们可以批量保存与链接的产品,如;prod1=新产品();prod1=新产品()$订单->产品()->saveMany([prod1,prod2],“数量”=>3])
saveMany()
绝对可以用于多对多关系和数据透视表。对于@HarlanGray,是的,解决方案与您描述的类似
saveMany()
接受可选的第二个参数,该参数是关联数组的数组。父数组中的元素数量必须与保存的模型数量相匹配,因此对于给定的示例,它将是:
…->saveMany([$prod1,$prod2],['quantity'=>1],'quantity'=>3]])
。这将在数据透视表上存储数量为1的产品1,以及数量为3的产品2。谢谢@BenJohnson