Php 在子表Laravel中插入数据时出现外键问题

Php 在子表Laravel中插入数据时出现外键问题,php,laravel,eloquent,orm,Php,Laravel,Eloquent,Orm,我试图在订单表中插入数据,然后在订单详情表中保存订单详情。下面是我正在尝试的代码 $order = Order::create($request->all()); $order->order_detail()->insert($request->order_detail); //$request->order_detail is an array 在我的模型中,我提供了关系 订单模型 public function order_detail(){ retur

我试图在订单表中插入数据,然后在订单详情表中保存订单详情。下面是我正在尝试的代码

$order = Order::create($request->all());
$order->order_detail()->insert($request->order_detail); //$request->order_detail is an array
在我的模型中,我提供了关系

订单模型

public function order_detail(){
   return $this->hasMany(OrderDetail::class, 'order_id');
}
订单细节模型

public function order(){
   return $this->belongsTo(Order::class,'order_id');
}
但它返回我一般错误:1364字段“order\u id”没有默认值,因为order\u id是order\u details表中的外键


我如何在不手动给出订单id的情况下完成这项工作听起来像是数据库问题。列
order\u id
具有自动增量,这意味着它将在插入时生成一个数字


尝试使用phpMyAdmin插入以查看自动增量是否有效。或者使用“显示表格状态”并选中“自动增量”。

因为您的
$request->order\u detail
不包含订单id。您可以从新创建的$order中获取该id

$order = Order::create($request->all()); // upon create, you can access the order_id by doing $order->id

$orderDetails = [];

foreach($request->order_detail as $details) {
    $orderDetails[] = [
        array_merge($details, ['order_id' => $order->id]);
    ];
}

$order->order_detail()->insert($orderDetails);

我将假设
$request->order\u detail
是一个由许多
order\u details
组成的数组

insert
的问题在于,您使用的不是Eloquent,而是查询生成器,因此Laravel无法自行填充
订单id
,如果您使用
createMany
,它将能够这样做:

$order = Order::create($request->all());
$order->order_detail()->createMany($request->order_detail);
从:

可以使用createMany方法创建多个相关模型:


当你做dd($code>dd($request->order\u detail)时,你看到了什么?@Digvijay数组:2[0=>数组:4[“产品id”=>32“数量”=>4“价格”=>“470.00”“详细信息”=>“复发性voluptas earum praesentium esse iure dignessimos.deleinitis voluptate debitis et not et.Dolorem reiciensis quia et omnis aut.”数组:4[“产品id”=>32“数量”=>4“价格”=>“470.00”详细信息“=>“有尊严、有尊严、有缺陷、无缺陷、无缺陷、无缺陷”]]不,它不是自动递增的。订单id未分配Laravel有没有办法自己获得订单?非常感谢这就是我要找的
$post = App\Post::find(1);

$post->comments()->createMany([
    [
        'message' => 'A new comment.',
    ],
    [
        'message' => 'Another new comment.',
    ],
]);