Php 删除所有关系,然后保存另一个-仅保存新关系
我有一个一对多的模型:一个明星可以有多张照片 当我更新我的星号时,我可以添加或删除图片。当我保存星号时,我会删除数据库中的所有图片,然后保存新图片。像这样:Php 删除所有关系,然后保存另一个-仅保存新关系,php,laravel,orm,laravel-5,eloquent,Php,Laravel,Orm,Laravel 5,Eloquent,我有一个一对多的模型:一个明星可以有多张照片 当我更新我的星号时,我可以添加或删除图片。当我保存星号时,我会删除数据库中的所有图片,然后保存新图片。像这样: $star->pictures()->delete(); $star->pictures()->saveMany($picturesAdded); 但我认为这些操作之间没有提交,因为只保存了新图片。所有已经在数据库中的图片,然后被删除,将不会保存在所有。 我认为雄辩在内存中保留它删除、插入或更新的内容,然后提交所有
$star->pictures()->delete();
$star->pictures()->saveMany($picturesAdded);
但我认为这些操作之间没有提交,因为只保存了新图片。所有已经在数据库中的图片,然后被删除,将不会保存在所有。
我认为雄辩在内存中保留它删除、插入或更新的内容,然后提交所有这些内容
所以我不知道如何继续。。。我只是想和数据库同步
$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]看看sync()
方法sync()
使该关系的唯一项目是您传入的项目。语法是$model->relationship()->sync($ids)
,其中$ids
是一个id数组
因此,假设$picturesAdded
是一个ID数组,您需要做的就是
$star->pictures()->sync($picturesAdded);
文档可以在
$model->relationship()->sync($ids)
中的@dramixx中找到,$ids
数组也可以采用[$id1=>['pivot\u col'=>'pivot\u val\u 1']、$id2=>['pivot\u col=>'pivot\u val\u 2'].]
的形式,这将允许您同步数据透视表data@kishanterry我不知道。酷。谢谢你指出这一点。欢迎。它在您提供的文档链接中,特别是多对多关系>为方便而同步部分确实,同步方法适用于多对多关系,但在我的例子中,这是一对多关系。为了更好地理解,我在帖子中添加了一个例子