1

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

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

有没有一种技巧可以用来以这种方式访问​​它们,或者我最好自己对结果集进行排序?

4

1 回答 1

3

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

请记住,DQL 映射到 SQL。要执行您的要求,DQL 必须从整个表中检索每条匹配记录,将它们水合到您的实体对象中,运行您的函数,然后在内存中排序(或重新运行查询)。这是一个好主意,但它只是行不通。

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

于 2011-03-20T22:18:11.160 回答