使用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