Doctrine 中的过滤器

Posted

技术标签:

【中文标题】Doctrine 中的过滤器【英文标题】:Filters in Doctrine 【发布时间】:2009-08-19 14:36:40 【问题描述】:

nHibernate 有一个很棒的功能叫做过滤器,所以我可以为我的应用程序全局创建标准。我正在用 php 开始一个项目,我需要使用 ORM,我想知道 Doctrine 是否有类似的功能来管理查询条件。

谢谢

【问题讨论】:

【参考方案1】:

Doctrine 2.2 具有filter system,允许开发人员将 SQL 添加到查询的条件子句中,而不管 SQL 生成的位置(例如,从 DQL 查询,或通过加载关联实体)。

过滤器功能适用于 SQL 级别。 SQL 查询是在 Persister 中、在延迟加载期间、在额外的延迟集合中还是从 DQL 中生成的。每次系统迭代所有启用的过滤器时,都会添加一个新的 SQL 部分作为过滤器返回。

通过在查询的条件子句中添加 SQL,过滤系统在 SQL 结果集级别过滤掉属于实体的行。这意味着过滤后的实体永远不会被水合(这可能很昂贵)。

【讨论】:

【参考方案2】:

我认为您正在寻找的是 Doctrine Query Hooks。

有许多用于 preUpdate、preSave、preCreate、postCreate、postUpdate、postSave、preSelect 等的钩子。

希望这会有所帮助。

【讨论】:

-1:这不是Hibernate Filters 提供的功能。 认真的吗?您要否决一个 3 岁的答案? Doctrine 当时甚至没有过滤器。您可以将其标记为已过时。

以上是关于Doctrine 中的过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine2:对关联应用过滤器

如何在 Symfony 中添加 Doctrine 过滤器?

如何在symfony中禁用doctrine的软删除(软删除)过滤器

如何使用 Symfony ACL 过滤我的 Doctrine 查询

添加附加查询时,Doctrine MongoDB geoNear() 参数设置为 0

奏鸣曲日期范围过滤器