С Doctrine 2.1 вы можете сделать это непосредственно в определении модели, но не с @OrderBy. Вы можете определить DQL фрагменты на уровне модели, как указано в 2.1 Beta release notes:
Названный DQL запросов в метаданных: Вы можете добавить DQL запросов в файлах отображения с использованием @NamedQueries (@NamedQuery (имя = «Foo», запрос = «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");
я не проверял тыс есть, но вы получаете идею.
Вы серьезно используете имя поля как «voted_up/voted_down» как имя? Я не хочу быть суждением. Но я думаю, что это какая-то привязанность. – renoirb
Извините, нет. Чтобы уточнить, это расчет. «voted_up» - это поле int, а «voted_down» - это int. – iamdev