自动过滤掉不符合 Doctrine 条件的行

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

我有一个数据库已经在使用中,我无法真正更改它。在这个数据库上,我使用 "soft delete":我没有实际删除记录,只是修改了一个标志(例如设置 del=1)。

我不使用 GEDMO 模板 (SoftDelete),但我想要相同的功能。目前,当我使用 QueryBuilder/find 函数时,它们 return 记录 del=1。关于协会实体功能的相同想法;我必须每次检查是否 del=0.

有没有办法自动过滤掉带有标志 del=1 的记录,除非明确要求?

您可能可以使用学说过滤器:

http://doctrine-orm.readthedocs.org/en/latest/reference/filters.html http://www.michaelperrin.fr/2014/07/25/doctrine-filters/

禁用:

http://doctrine-orm.readthedocs.org/en/latest/reference/filters.html#disabling-enabling-filters-and-setting-parameters

另一种观点是通过执行以下操作使您的代码更具可读性,也许更容易:

$entity = $em->getRepository("MyBundle:Entity")->findBy(['del' => 0]);

这只添加了很少的代码,并且对任何reader你正在做的事情都是显而易见的。

编辑

或者,如果您的数据库和权限允许(例如,MySQL 中的 root),您可以创建一个仅包含 del=0 记录的视图。对于 MySQL,这里是 CREATE VIEW doc。 Doctrine 允许使用视图。