gpt4 book ai didi

php - Symfony Doctrine 防止特定实体的记录删除

转载 作者:行者123 更新时间:2023-12-03 11:22:05 24 4
gpt4 key购买 nike

想象一下,我有一些 Doctrine 实体,我可以在数据库中拥有一些该实体的记录,我不想删除这些记录,但我希望它们可见。

一般来说,我可以有实体,我有默认记录,必须保留在那里 - 不能被删除,但必须是可见的。

或者例如,我只想为 CRON 操作拥有特殊的用户帐户。我希望此帐户在用户列表中可见,但不能将其删除 - 显然。

我正在搜索,最好的结果是 SoftDeletable https://github.com/Atlantic18/DoctrineExtensions/blob/v2.4.x/doc/softdeleteable.md它可以防止从 DB 中进行 fyzical/real 删除,但也使其在应用程序的前端不可见。这是一个很好的方法 - 在实体的相应表列中创建一列 - 1/0 标志 - 这将标记无法删除的内容。我也喜欢这种方式,因为它可以在多个实体中用作特征。我认为这将是上述 Atlantic18/DoctrineExtensions 扩展中另一个扩展的良好候选者。如果您认为这是个好主意(Doctrine 过滤器),那么最好的步骤是什么?

问题是,这是唯一的方法吗?你有更好的解决方案吗?解决这个问题的常用方法是什么?

编辑:
1. 所以,我们知道,我们需要在数据库中添加额外的列 - 很容易为它创建一个特性以使其可重用

2. 为了每个仓库都没有额外的代码,如何借助Annotation来实现“如果列为真,则防止删除”的逻辑?就像上面的 SoftDeletable 示例一样。

先感谢您。

最佳答案

您可以在数据库级别执行此操作。只需创建一个名为的表,例如 protected_users外键为 users并将 key 设置为 ON DELETE RESTRICT .在此表中为您不想删除的每个用户创建一条记录。这样,在 Doctrine 和 db 级别(在 db 中的任何手动干预)中,任何删除记录的尝试都将失败。没有编辑 users实体本身是需要的,即使没有 Doctrine,它也会受到保护。当然,你可以为那个 protected_users 创建一个实体。 table 。

您还可以在 User 实体上创建一个方法,例如 isProtected()它只会检查相关的 ProtectedUser 实体是否存在。

关于php - Symfony Doctrine 防止特定实体的记录删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61110292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com