我有一个数据库已经在使用,我真的无法更改它。在这个数据库上,我使用"软删除":我只是修改一个标志(例如设置del=1
),而不是实际删除一条记录。
我不使用GEDMO模板(SoftDelete),但我想要相同的功能。目前,当我使用QueryBuilder/find函数时,它们返回带有del=1
的记录。对关联实体的功能有相同的看法;我每次都要检查del=0
。
是否有一种方法可以自动筛选出带有标志del=1
的记录,除非明确要求?
您可能可以使用条令过滤器:
http://doctrine-orm.readthedocs.org/en/latest/reference/filters.htmlhttp://www.michaelperrin.fr/2014/07/25/doctrine-filters/
要禁用:
http://doctrine-orm.readthedocs.org/en/latest/reference/filters.html#disabling-启用过滤器并设置参数
另一个观点是通过这样做来提高代码的可读性,也许更容易:
$entity = $em->getRepository("MyBundle:Entity")->findBy(['del' => 0]);
这只增加了很少的代码,对任何读者来说都是显而易见的
编辑
或者,如果您的数据库&privileges permission(例如MySQL中的root)您可以创建一个仅包含del=0
记录的视图。对于MySQL,这里有CREATE VIEW文档。学说允许使用观点。