【问题标题】:Laravel Eloquent create related item doesnt saveLaravel Eloquent 创建相关项目不保存
【发布时间】:2020-12-02 09:05:19
【问题描述】:

我今天遇到了一个奇怪的问题/错误。

我有一个订单表和一个用于指定产品的表 (order_items) 创建新订单时一切正常,项目按应有的方式保存。


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

if (!empty($order)) {
    foreach ($request->get('items') as $item) {
        $item['order_id'] = $order->id;
        OrderItems::create($item);
    }
}

问题是我以后无法添加项目,无论出于何种原因。 我没有收到任何错误或错误响应,即使 order_items 表的自动增量增加。


Orders::findOrFail($id)->update($request->all());

if(isset($data['items']) && is_array($data['items'])) {
    foreach ($data['items'] as $item) {
        if (!empty($item['id'])) {
            OrderItems::findOrFail($item['id'])->update($item);
            continue;
        }

        $item['order_id'] = $id;
        OrderItems::create($item);
    }
}

【问题讨论】:

    标签: php laravel eloquent lumen


    【解决方案1】:

    如果找不到您的项目,这将引发异常并且您的脚本的执行将停止。

    OrderItems::findOrFail($item['id'])->update($item);
    

    你需要像这样捕获异常:

    try {
        OrderItems::findOrFail($item['id'])->update($item);
    } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
        $item['order_id'] = $id;
        OrderItems::create($item);
    } 
    

    【讨论】:

    • 我知道,但这就是我的问题所在。附加项目没有 ID 问题是 OrderItems::create($item);不保存项目但仍会增加表的自动增量,我不确定这是否是由于与订单表的关系而导致的问题,但初始创建也不应该工作。我没有收到任何错误,我什至从 OrderItems::create($item); 得到正确的响应;
    • 您的字段在您的模型中是否可填充或受保护?你也可以 dd($request->all);查看正在尝试保存的订单
    • 我检查了我能做的一切,这没有任何意义,也许这是一个 mysql 问题。是的,我需要填写的每个字段都在 $fillable 中,如果没有,初始创建也不起作用。
    • ->update($item) 位是否更新 DB @ChristianReinelt 中的数据
    猜你喜欢
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2013-02-26
    相关资源
    最近更新 更多