在Laravel中的多行插入中为字段设置固定值

时间:2018-07-29 13:58:09

标签: php mysql sql laravel

我有一个数组$cart

$cart = [
    ["product_id" => 1, "price" => 20, "amount" => 5, "tax" => 15],
    ["product_id" => 2, "price" => 30, "amount" => 10, "tax" => 20],
    ...
];

我能做

DB::table('order_products')->insert($cart);

但是我需要将此数组插入具有相同列+ order_id的表中。 order_id对于所有行都是相同的,它是前一个查询的插入ID。是否可以为所有行的order_id设置一个固定值?

1 个答案:

答案 0 :(得分:1)

当您使用雄辩的模型并且您的Order模型具有 hasMany 关系order_products()时,可以在该关系上使用createMany()方法:

$order->order_products()->createMany($cart);

对于save()saveMany()方法以及create()createMany()的方法,如果在关系上调用,则为外键(在您的情况下为order_id )将自动从父$order实体获取。

documentation中,您还会找到此注释:

  

在使用create方法之前,请务必阅读文档   在属性mass assignment上。

最重要的是您已经弄清楚的$fillable属性。

请注意,您还应该可以对订单本身使用create()。我不知道为什么它对您不起作用。检查$fillable模型中的Order属性。通常,订单也属于用户-因此您需要分配user_id,该数组中可能缺少该$order = Auth:user()->orders()->create($orderArray); 。可行的方法是

user_id

Auth:user()将从{{1}}提取并自动分配给订单。