【问题标题】:How to set a deleted property to true rather than removing a related doctrine entity in Symfony如何将已删除的属性设置为 true,而不是在 Symfony 中删除相关的学说实体
【发布时间】:2019-03-01 16:07:37
【问题描述】:

我正在构建一个允许用户为广告商创建报告的应用。实体的设置使得 Report 对象和 Advertiser 对象之间存在关系 - 因此广告商有一个 getReports() 方法来获取它们。

我想更改应用程序,以便它只是将“已删除”属性更改为 true,而不是实际删除实体。这部分没问题,但我不确定如何做到这一点,以便 Advertiser 实体上的 getReports() 只返回具有 false 已删除属性的广告商的报告。

如果您对如何按照 Symfony 最佳实践进行操作有任何建议,请告诉我。

【问题讨论】:

  • 您是否还需要获取广告商的“已删除”报告?还是保持广告商与已删除报告之间的关系?
  • 不,我不需要能够获取已删除的报告,但可以在必要时手动翻转数据库中的已删除标志以将其取回。

标签: symfony doctrine-orm doctrine


【解决方案1】:

您应该查看 Gedmo Doctrine Extensions。 http://atlantic18.github.io/DoctrineExtensions/

专门针对您的情况: http://atlantic18.github.io/DoctrineExtensions/doc/softdeleteable.html

TLDR;它们允许您以您希望的方式配置实体的行为,例如,当您“删除”一个实体时,Gedmo 的侦听器会将其 deleted 值设置为当前日期时间。现在您的数据库中仍然有该记录,但 not null 的值 deleted 列将其标记为“软删除”,因此在查询时不会返回它(因为 Doctrine 知道如何查询这些内容并且会添加条件,即:... where deleted ...),除非您明确表示要查看那些软删除的记录。

【讨论】:

  • 这看起来很有趣,但似乎几年后没有更新:2016-01-27。
  • 我认为 Symfony 仍然推荐这个包。
  • 我的错 - 在这个页面上看起来它显示它是在 2018 年更新的,我会尝试使用这个捆绑包。 packagist.org/packages/gedmo/doctrine-extensions
  • 在 Symfony 4 中工作似乎是一场艰苦的战斗。我按照此页面 blog.joeymasip.com/gedmo-translations-in-symfony-4 中的说明进行操作,发现他们引用的 stof_doctrine_extensions.yaml 文件不是使用配方创建的 - 当我应用他们提到的教义.yml 更改时,应用程序不再工作。 Atlantic18 网站(或我能找到的任何地方)似乎没有关于如何在 Symfony 4 中进行设置的文档。
  • 我终于能够正确安装 StofDoctrineExtensionsBundle。安装的问题是我需要在我的 composer.json 中为 symfony 设置 "allow-contrib": true。本文为我指出了解决方案:github.com/stof/StofDoctrineExtensionsBundle/issues/365
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
相关资源
最近更新 更多