为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
Helenr 2023-07-08 20:40:51
我正在尝试在订单表中插入数据,然后将订单详细信息保存在order_details表中。以下是我正在尝试的代码$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_id”没有默认值,因为 order_id 是order_details表中的外键如何在不手动提供 order_id 的情况下做到这一点
查看完整描述

3 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

我假设这$request->order_detail是一个由许多 组成的数组order_details。


问题insert是您没有使用 Eloquent,而是使用查询生成器,因此 Laravel 无法自行填充order_id,如果您使用createMany它,它将能够这样做:


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

$order->order_detail()->createMany($request->order_detail);

来自文档:


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


$post = App\Post::find(1);


$post->comments()->createMany([

    [

        'message' => 'A new comment.',

    ],

    [

        'message' => 'Another new comment.',

    ],

]);


查看完整回答
反对 回复 2023-07-08
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

因为你的$request->order_detail不会包含 order_id。您可以从新创建的 $order 中获取它。


$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);


查看完整回答
反对 回复 2023-07-08
?
侃侃尔雅

TA贡献1801条经验 获得超15个赞

听起来像是数据库问题。该列order_id具有 AUTO_INCRMENT,这意味着它将在插入时生成一个数字。

尝试使用 phpMyAdmin 插入以查看 AUTO_INCRMENT 是否有效。或者使用 SHOW TABLE STATUS 并检查 AUTO_INCRMENT。


查看完整回答
反对 回复 2023-07-08
  • 3 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信