是否有Doctrine的查询语言访问对象方法的技巧?

时间:2011-03-19 14:20:54

标签: php orm doctrine-orm dql

我的实体类有一些方法(计算创建和截止日期之间的时间间隔等),我想在我的DQL中订购。我尝试使用__get作为属性访问该方法,但似乎DQL使用get_object_properties或类似的,所以这不起作用。

无效的示例查询:SELECT t FROM Entity\Task t ORDER BY t.TTL ASC,其中通过__get()访问TTL,返回getTTL()

我是否可以通过这种方式使用它来访问它们,或者我最好只是自己对结果集进行排序?

1 个答案:

答案 0 :(得分:3)

不可能。要按计算值排序,请预先计算值并将其存储在字段中。预先计算这些值将具有更高效和响应更快的查找的额外好处。

请记住,DQL映射到SQL。为了做你要问的事,DQL必须从整个表中检索每个匹配的记录,将它们水合成你的实体对象,运行你的函数然后在内存中排序(或重新运行查询)。这是一个好主意,但它不起作用。

如果您不喜欢预先计算值的想法,对于大多数这些计算,您可能还可以在DQL中内联计算它们 - 即按两个字段值之间的差异排序。重要的是它必须在DQL中内联而不是在实体对象上调用计算函数。

相关问题