Laravel Eloquent Model::save 不将对象保存到 db 中,没有错误信息

问题描述 投票:0回答:1

我正在开发一个 Laravel 9.0 项目,该项目使用 Eloquent 模型来表示对象并将它们存储在数据库中。大多数时候,Eloquent 都会按预期工作。

但是,当我需要从数据库加载对象列表,向列表添加/删除项目,然后在数据库中重新保存列表(通过删除旧列表元素并插入新元素)时,它不起作用:旧元素被删除,但新元素不会被 Model::save 方法保存。

没有错误信息,save方法返回true。请查看下面的测试代码,让我知道出了什么问题以及如何修复它:

        //loading contract attachments
        $atts = Attachment::where('contract_id', 386)->get(); 

        //deleting old attachments in the db
        Attachment::where('contract_id', 386)->delete();

        //placeholder for code to add/remove elements from the attachements list in the memory

        //reinserting the attachement list to the db
        foreach ($atts as $a ) {
            //unsetting the id to force a new insert
            unset($a->id);
            $a->save();
        }

```   

In the debugger, I can see that the attachments look good in memory, when I`m trying to insert them: 
[![debugger][1]][1]


  [1]: https://i.sstatic.net/BHJmvhAz.png
mysql laravel eloquent
1个回答
0
投票

我会亲自复制模型,将它们保存到数据库,然后删除旧模型:

    $atts = Attachment::where('contract_id', 386)->get(); 

   
    foreach ($atts as $a ) {
        $a->replicate()->save();
        $a->delete();
    }

我没有测试这段代码。删除方法也可以在最后,只需从原始模型中选择id即可

© www.soinside.com 2019 - 2024. All rights reserved.