Doctrine orm Doctrine2@OrderBy是否可以按计算字段排序?

Doctrine orm Doctrine2@OrderBy是否可以按计算字段排序?,doctrine-orm,Doctrine Orm,我想用一个商对模型关联的ArrayCollection进行排序,如下所示(我知道以下代码不起作用): 在模型定义中是否可以直接实现这一点,或者在请求数据时是否只需在ArrayCollection上使用sort()?使用原则2.1,您可以直接在模型定义中实现这一点,但不能使用@OrderBy。您可以在模型级别定义DQL代码段,如中所述: 元数据中的命名DQL查询:您可以使用@namedquerys(@NamedQuery(name=“foo”,query=“DQL”))在映射文件中添加DQL查询,

我想用一个商对模型关联的
ArrayCollection
进行排序,如下所示(我知道以下代码不起作用):


在模型定义中是否可以直接实现这一点,或者在请求数据时是否只需在
ArrayCollection
上使用sort()?

使用原则2.1,您可以直接在模型定义中实现这一点,但不能使用@OrderBy。您可以在模型级别定义DQL代码段,如中所述:

元数据中的命名DQL查询:您可以使用@namedquerys(@NamedQuery(name=“foo”,query=“DQL”))在映射文件中添加DQL查询,并通过$em->getRepository()->getNamedQuery()访问它们

因此,您可以使用ORDER BY关键字创建DQL查询,例如:

SELECT c.id, c.text, (c.voted_up / c.voted_down) AS sortkey FROM Comment c
ORDER BY sortkey DESC
/**
 * @Entity
 * @Table(name="comment")
 * @NamedQueries(@NamedQuery(name="sortedComment", query="SELECT c.id, c.text, (c.voted_up / c.voted_down) AS sortkey FROM Comment c ORDER BY sortkey DESC"))
 */
 class Comment {
     ...
 }
因此,我设想您将此注释添加到模型定义中,类似于:

SELECT c.id, c.text, (c.voted_up / c.voted_down) AS sortkey FROM Comment c
ORDER BY sortkey DESC
/**
 * @Entity
 * @Table(name="comment")
 * @NamedQueries(@NamedQuery(name="sortedComment", query="SELECT c.id, c.text, (c.voted_up / c.voted_down) AS sortkey FROM Comment c ORDER BY sortkey DESC"))
 */
 class Comment {
     ...
 }
然后在您的代码调用中:

$em->getRepository("Comment")->getNamedQuery("sortedComment");

我没有测试这个,但你知道了。

这是个好消息!我仍然在使用2.0,所以我将在等待稳定的2.1的同时破解一个解决方案。非常感谢你的回答,法肯!你真的在用字段名作为“投票赞成/投票反对”的名称吗?我不想做评判。但我认为这是一种解释。对不起,不。澄清一下,这是一种计算。“投票赞成”是一个整型字段,“投票反对”是一个整型字段。