【问题标题】:can detach() method also be applied to one to many relationship in Laravel?detach() 方法也可以应用于 Laravel 中的一对多关系吗?
【发布时间】:2018-03-17 01:45:07
【问题描述】:

在 Laravel 文档中,我找到了 detach() 方法来分离多对多关系中的所有对象。 detach() 方法也可以应用于 Laravel 中的一对多关系吗?如果没有,在这种情况下如何分离所有 n 个对象?

【问题讨论】:

  • laravel 中的 detach() 方法不用于删除对象。它只会分离两个模型之间的关系

标签: php laravel laravel-5


【解决方案1】:

在多对多关系中,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
【解决方案2】:

来自docs

当删除一个 belongsTo 关系时,你可以使用 dissociate 方法。此方法会将关系的外键设置为 null

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

$user->save();

【讨论】:

    猜你喜欢
    • 2010-10-25
    • 1970-01-01
    • 2022-01-19
    • 2016-12-09
    • 2019-11-07
    • 2011-09-04
    • 2019-11-21
    • 2018-06-15
    • 1970-01-01
    相关资源
    最近更新 更多