3

有没有办法将基于虚拟字段的逻辑插入到 Doctrine_Query 中?

我在我的模型中定义了一个虚拟字段“getStatus()”,我最终希望在我的 Doctrine_Query 的 Where 子句中使用它。

...
->AndWhere('x.status = ?',$status);

但是,“状态”不是表中的列,而是由模型中的业务逻辑计算的。

在某些情况下,在执行查询后过滤 Collection 是可行的,但在混入 Doctrine_Pager 时无效,因为它会在您访问 Collection 之前计算它的偏移量等。

在修改 Doctrine_Collection 之后,我最好放弃 Doctrine_Pager 并重建该功能吗?

4

2 回答 2

0

如果你可以在 SQL 中做到这一点,你可以在 Doctrine 中做到这一点。所有教义所做的就是计算出您要放入 DQL 解析器的内容,无论是字符串还是值,然后将其转换为 SQL,然后从结果中对对象进行水合。

您不能使用 Doctrine_Pager 对非查询对象进行分页,但是您可以使用 sfPager 并将 Doctrine_Collection 的结果作为数组传递给它?在最坏的情况下,您可以将查询结果减去查询中的任何限制传递给它,然后让它处理分页,但这确实效率低下。

像使用普通的旧 PHP 一样编写寻呼机“old skool”可能会更快。

于 2010-05-24T06:53:14.257 回答
0

我真的不知道您正在应用什么业务逻辑来计算状态,但如果它不是实时的(如,按请求计算),我会在保存时计算它(使用 Doctrine Record Listener 或只是 preSave /preInsert 模型中的钩子)并将其存储在表中,或者设置一个 symfony 任务以定期刷新它并将其作为 cronjob 运行。这会让你在 Doctrine 中很好地查询它,并作为附带好处提高性能。

或者,如果状态取决于相关对象的状态,您可以在它们上放置一个事件触发器,以便在修改父对象时更新它们的状态。如果没有更多上下文,很难推荐最佳方法。:)

于 2010-05-27T17:00:32.427 回答