自动筛选出不符合';不符合条令中的条件


Automatically filter out rows that don't meet a condition in Doctrine

我有一个数据库已经在使用,我真的无法更改它。在这个数据库上,我使用"软删除":我只是修改一个标志(例如设置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文档。学说允许使用观点。