Laravel - 一对多关系上的保存方法的对立面是啥?

Posted

技术标签:

【中文标题】Laravel - 一对多关系上的保存方法的对立面是啥?【英文标题】:Laravel - What is the opposite of the save method on a one-to-many relationship?Laravel - 一对多关系上的保存方法的对立面是什么? 【发布时间】:2016-04-01 16:53:52 【问题描述】:

假设我正在建立一个一对多关系的关联,就像这样

$artwork->views()->save($view);

我将如何删除此关联?

【问题讨论】:

【参考方案1】:

detach() 是多对多关系,你想要的是dissociate()。根据文档:

$user->account()->dissociate();
$user->save();

https://laravel.com/docs/5.1/eloquent-relationships#inserting-related-models

【讨论】:

我认为这是正确的,但是如何只删除一个关联的项目? 好问题。目前无法尝试自己,但也许可以尝试从另一个模型中分离出来,看看是否可行? 我走了很长一段路,最终将另一个模型的artifact_id设置为NULL,这实际上是做同样的事情。这是正确的答案。谢谢@Joel Hinz【参考方案2】:

您正在展示一个创建关联的代码。我猜你的意思是删除:

App\Views::destroy(245);

https://laravel.com/docs/5.1/eloquent#deleting-models

【讨论】:

【参考方案3】:

扩展@Joel Hinz 的回答,只从关系中删除一项如何:

$artwork->views()->first()->delete();

您也可以使用wherelatest 等进行选择。

【讨论】:

以上是关于Laravel - 一对多关系上的保存方法的对立面是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.8 在数据透视表上保存一对多关系

如何使用 laravel 8 同时保存一对多关系数据

Laravel Eloquent - 保存/更新相关的一对多关系数据

在 Laravel 中保存一对一的关系

Laravel SUM 一对多(逆)/属于关系

Laravel 上的多对多问题关系