С Doctrine 2.1 вы можете сделать это непосредственно в определении модели, но не с @OrderBy. Вы можете определить фрагменты DQL на уровне модели, как указано в примечаниях к выпуску 2.1 Beta :
Именованные DQL-запросы в метаданных: вы можете добавлять dql-запросы в файлы сопоставления с помощью @NamedQueries (@NamedQuery (name = "foo", query = "DQL")) и получать к ним доступ через $ em-> getRepository (.) -> getNamedQuery ()
Таким образом, вы можете создать свой DQL-запрос с ключевыми словами ORDER BY, например:
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");
Я не проверял это, но вы поняли.