使用Doctrine 2.1,您可以直接在模型定义中执行此操作,但不能使用@OrderBy。您可以在模型级别定义DQL片段,就像在规定的2.1 Beta release notes:
命名DQL查询在元数据:可以使用@NamedQueries(@NamedQuery(name =“foo”的映射文件添加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 {
...
}
,然后在你的代码调用:
$em->getRepository("Comment")->getNamedQuery("sortedComment");
我没有测试日是,但你明白了。
您是否认真使用字段名称作为“voted_up/voted_down”作为名称?我不想做出评判。但我认为这是某种堕落。 – renoirb 2012-10-04 15:42:07
对不起,没有。澄清,这是一个计算。 “voted_up”是一个int字段,“voted_down”是一个int字段。 – iamdev 2012-10-26 14:05:25