【发布时间】:2018-03-17 01:45:07
【问题描述】:
在 Laravel 文档中,我找到了 detach() 方法来分离多对多关系中的所有对象。 detach() 方法也可以应用于 Laravel 中的一对多关系吗?如果没有,在这种情况下如何分离所有 n 个对象?
【问题讨论】:
-
laravel 中的 detach() 方法不用于删除对象。它只会分离两个模型之间的关系
在 Laravel 文档中,我找到了 detach() 方法来分离多对多关系中的所有对象。 detach() 方法也可以应用于 Laravel 中的一对多关系吗?如果没有,在这种情况下如何分离所有 n 个对象?
【问题讨论】:
在多对多关系中,detach() 方法仅删除数据库中的数据透视条目,除非您有特定的级联删除。
对于一对多关系,你想使用 dissociate() 方法解除绑定关系,并使用 associate() 方法将其绑定到 belongsTo 端。
$comment->post()->associate($post->id);
相反,您可以在 hasMany 端使用 attach() 添加帐户:
$post->comments()->attach($comment->id);
要删除所有你会做的 cmets:
$post->comments()->delete();
更多信息在这里: https://laravel.com/docs/5.6/eloquent-relationships
【讨论】:
HasMany 关系上调用delete() 不会解除相关模型的关联,而是将它们从数据库中完全删除!如果您只需要删除关系,这不是要走的路。事实上,看起来 Laravel 没有内置的方法,所以你需要遍历所有的孩子并一个一个地解除它们的关联。或者,直接数据库查询可以一次性完成。可以在这里看到一个解决方案:stackoverflow.com/a/61135296/1319004
来自docs
当删除一个 belongsTo 关系时,你可以使用 dissociate 方法。此方法会将关系的外键设置为 null
$user->account()->dissociate();
$user->save();
【讨论】: