我正在开发一个 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
我会亲自复制模型,将它们保存到数据库,然后删除旧模型:
$atts = Attachment::where('contract_id', 386)->get();
foreach ($atts as $a ) {
$a->replicate()->save();
$a->delete();
}
我没有测试这段代码。删除方法也可以在最后,只需从原始模型中选择id即可