我有一个模型一对多:一个星可以有多张图片。
当我更新我的星星时,我可以添加或删除图片。当我保存星星时,我会删除数据库中的所有图片,并保存新的图片。像这样:
$star->pictures()->delete();
$star->pictures()->saveMany($picturesAdded);
但我认为这些动作之间没有提交,因为只保存了新图片。已经在数据库中然后被删除的所有图片将根本不保存。 我认为Eloquent在内存中保留了删除,插入或更新的内容,然后它会提交所有内容。
所以我不知道如何继续......我只是想与数据库同步。
$ star-> push()是否设法做我想要的?它是否会删除不再存在的关系,还是仅插入/更新新关系?
如果第一个问题属实,那该怎么做?
我试过了:
$star->pictures = Collection::make($picturesAdded);
$star->push();
但我有一个错误:
Unknown column 'pictures' in 'field list'
希望你能帮忙
修改
也许一个例子会被欣赏:
我有一张带有图片的明星[1,2,3,4]。我编辑了这颗星,现在我得到了[1,2,5,6]。 如果我做我写的(收集删除,然后保存许多),我现在在我的数据库[5,6],而我想[1,2,5,6]
答案 0 :(得分:2)
查看sync()
方法。 sync()
使得该关系的唯一项目就是您传入的项目。语法为$model->relationship()->sync($ids)
,其中$ids
是一组ID。
所以你需要做的就是假设$picturesAdded
是一个id数组,是
$star->pictures()->sync($picturesAdded);
中找到文档