Может ли Doctrine2 @OrderBy рассчитать поле? - PullRequest
0 голосов
/ 06 июня 2011

Я хочу отсортировать связанный с моей моделью ArrayCollection с частным, как это (я знаю, что следующий код не работает):

/** 
 * @OneToMany (targetEntity="Review", mappedBy="product") 
 * @OrderBy ({"voted_up / voted_down" = "DESC"})
 */
protected $reviews;

Возможно ли это прямо в определении моделимне нужно просто использовать sort () на ArrayCollection при запросе данных?

1 Ответ

2 голосов
/ 06 июня 2011

С 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");

Я не проверял это, но вы поняли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...