【问题标题】:How to turn off pivot deletion when soft deleting in the main table?在主表中软删除时如何关闭数据透视删除?
【发布时间】:2013-08-12 15:31:32
【问题描述】:

我在 Laravel 的 Eloquent ORM 中有一个 Users 和一个 Groups 表。一个组中可以有多个用户,一个用户可以在多个组中,所以我使用数据透视表来实现多对多的关系。实际上,这种关系不是多对多的,因为每个用户只能属于一个组,但系统就是这样设计的。我软删除了Users 表中的行,因此如果需要,我可以稍后恢复用户。

问题是当我删除一个用户时,系统也会自动删除数据透视表中的条目。这始终是一个条目。我没有把它设置成这样,只是在Users模型中添加了protected $softDelete = true;这一行,所以我不明白为什么系统会自动删除pivot条目。

我不想软删除数据透视条目,我只想软删除用户,并且系统不应触及其他任何内容。
我可以创建自己的删除函数,将deleted_at 变量设置为实际时间,但是如果需要,我不能通过将true 更改为false 来简单地关闭软删除。

为什么系统会自动删除数据透视条目,如何关闭此行为?

【问题讨论】:

  • 另一个答案是建议在您的多对多关系中添加一个约束来过滤,这与您的预期不完全一样,也不确定它是否有效。 stackoverflow.com/a/18144975/439427
  • 我的意思是过滤废弃的关系。
  • 根据我的经验,当软删除一行时,它不会删除数据透视条目,你能给我们一个你的模型和代码的例子吗?

标签: php many-to-many laravel eloquent soft-delete


【解决方案1】:

如果您使用外键,请检查您的数据库,您可能会将其设置为 ON UPDATE,ON DELETE "CASCADE"。您需要将其设置为“NO ACTION”

CONSTRAINT `fk_USER_Address_1` FOREIGN KEY (`userId`) REFERENCES `USER` (`userId`) ON UPDATE CASCADE ON DELETE CASCADE,

CONSTRAINT `fk_USER_Address_1` FOREIGN KEY (`userId`) REFERENCES `USER` (`userId`) ON UPDATE CASCADE ON DELETE NO ACTION,

【讨论】:

    猜你喜欢
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2023-03-26
    • 2012-04-02
    • 1970-01-01
    相关资源
    最近更新 更多