删除所有关系然后保存另一个 - 只保存新的

时间:2015-08-12 21:46:30

标签: php laravel orm laravel-5 eloquent

我有一个模型一对多:一个星可以有多张图片。

当我更新我的星星时,我可以添加或删除图片。当我保存星星时,我会删除数据库中的所有图片,并保存新的图片。像这样:

$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]

1 个答案:

答案 0 :(得分:2)

查看sync()方法。 sync()使得该关系的唯一项目就是您传入的项目。语法为$model->relationship()->sync($ids),其中$ids是一组ID。

所以你需要做的就是假设$picturesAdded是一个id数组,是

$star->pictures()->sync($picturesAdded); 

可以在Eloquent Relationships#Inserting Related Models

中找到文档