Doctrine_Core::getTable()-›findAll() как указать порядок?

При использовании объекта Doctrine_Table можно ли указать порядок возвращаемой коллекции при использовании findAll() или findByWhatever()?

В документах я вижу кое-что о getOrderByStatement() и processOrderBy(), но это не так. понятно как ими пользоваться...


person Jake Wilson    schedule 19.08.2011    source источник


Ответы (4)


Вы также можете оставить первый массив пустым

  $em->getRepository('BackendDestinyBundle:Destiny')->findBy(array(), array('title'=>'asc'));
person Aaron    schedule 25.03.2013
comment
Хорошо, мой плохой, не плачь, пожалуйста, просто пытаюсь помочь - person Aaron; 25.03.2013
comment
Спасибо. Это то, что я хотел. Быстро, просто и работает удовольствие. - person dnshio; 01.07.2013
comment
на самом деле это лучше, чем построитель запросов (на мой взгляд), в конце концов, реализация findAll() представляет собой такой вызов findBy(array()) вот исходный код - person Mateo Torres; 28.09.2013
comment
Благодарю вас! Я просто использовал это: public function findAll() { return $this->findBy(array(), array('name' => 'ASC')); } Чтобы быстро перезаписать порядок findAll, возвращенный для возврата формы объекта. - person Scott Flack; 25.10.2013

Фактически вы можете указать порядок по умолчанию в своей схеме:

Foo:
  columns:
    ...
  options:
    orderBy: bar DESC

Обратите внимание, что если вы хотите указать другой порядок, вы все равно можете создать запрос и переопределить порядок по умолчанию.

person Gerry    schedule 19.08.2011
comment
Не знал этого. Это очень полезно. Спасибо - person Jake Wilson; 19.08.2011
comment
разве это не только для отношений? - person Flask; 20.08.2011
comment
Нет, это работает и для моделей, но вы можете использовать этот трюк и для отношений. - person Gerry; 20.08.2011
comment
Это не очень хорошая идея. Заказы могут быть дорогими, и вы не хотите выдавать их для КАЖДОГО запроса. - person Mike Purcell; 28.07.2015

Согласно Джону Уэйджу, в этом случае вам следует создать запрос… Найдено в рассылке- список

person Flask    schedule 19.08.2011
comment
Да, я подумал, что это может быть единственным решением, просто не был уверен. Спасибо - person Jake Wilson; 19.08.2011

В моем случае проблема заключалась в том, что у меня было такое утверждение

$destinos  = $em->getRepository('BackendDestinyBundle:Destiny')->findAll();

наконец, я изменил его на оператор CreateQuery, он делает то же самое, но я могу поставить предложение OrderBy

$destinos  = $em->createQuery("SELECT d FROM BackendDestinyBundle:Destiny d order by d.name")->getResult();
person Jorge Ibacache    schedule 14.03.2013
comment
Вы говорите здесь о Doctrine 2, и, кстати, это не лучший способ использовать Doctrine. Следует построить запрос без написания кода sql... Здесь вы теряете все преимущества ORM... - person j0k; 14.03.2013
comment
На самом деле он неплохо использует ORM, так как это DQL, а не SQL. - person Łukasz Wojciechowski; 22.09.2013