【问题标题】:How to use saveMany while assigining a value to a pivot table in Laravel?如何在 Laravel 中将值分配给数据透视表时使用 saveMany?
【发布时间】:2018-02-25 16:57:11
【问题描述】:

我在 laravel 中有一个多对多关系,其中有一个数据透视表,它将 Products 和 Orders 与一个带有 Quantity 数据透视值的 order_product 表连接起来。

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

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

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

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

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

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    您应该改用附加。 saveMany 用于没有数据透视表的一对多关系。如果您有数据透视表,则它是多对多关系。那么代码是这样的:

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

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

    【讨论】:

    • 此解决方案假定产品已保存。没有解决方案,我们可以通过以下链接批量保存产品; prod1 = 新产品(); prod1 = 新产品(); $order->products()->saveMany([prod1,prod2], ["quantity" => 3]);
    • saveMany() 绝对可以与多对多关系和数据透视表一起使用。对于@HarlanGray,是的,解决方案与您描述的类似。 saveMany() 接受一个可选的第二个参数,它是一个关联数组的数组。父数组中的元素数量必须与保存的模型数量相匹配,因此对于给出的示例,它将是:...->saveMany([$prod1, $prod2], [['quantity' => 1], ['quantity' => 3]])。这将在数​​据透视表上存储数量为 1 的产品 1,以及数量为 3 的产品 2。
    • 谢谢@BenJohnson
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2016-11-14
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多