Я читал документацию Doctrine, но не смог найти способ отсортировать результаты findAll ().
Я использую доктрину symfony2 +, это утверждение, которое я использую внутри своего контроллера:
$this->getDoctrine()->getRepository('MyBundle:MyTable')->findAll();
но я хочу, чтобы результаты были упорядочены по возрастанию имен пользователей.
Я пытался передать массив в качестве аргумента следующим образом:
findAll( array('username' => 'ASC') );
но не работает (тоже не жалуется).
Есть ли способ сделать это без построения DQL-запроса?
источник
источник
Просто:
источник
Иногда полезно посмотреть исходный код.
Например,
findAll
реализация очень проста (vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php
):Итак, смотрим
findBy
и находим то, что нам нужно (orderBy
)источник
Это работает для меня:
Сохранение первого массива пустым возвращает все данные, в моем случае это сработало.
источник
Посмотрите исходный код Doctrine API:
источник
Вам нужно использовать критерии, например:
источник
Метод findBy в Symfony исключает два параметра. Первый - это массив полей, по которым вы хотите выполнить поиск, а второй массив - это поле сортировки и его порядок.
источник
Вы можете отсортировать существующую коллекцию ArrayCollection с помощью итератора массива.
предполагая, что $ collection - это ваш ArrayCollection, возвращаемый findAll ()
Это можно легко превратить в функцию, которую вы можете поместить в свой репозиторий, чтобы создать метод findAllOrderBy ().
источник
Попробуй это:
источник
Использую альтернативу тому решению, которое написал nifr.
Это быстрее, чем предложение ORDER BY , и без накладных расходов Iterator.
источник
Измените функцию findAll по умолчанию в EntityRepository следующим образом:
Таким образом, вы можете использовать findAll в любом запросе для любой таблицы данных с возможностью сортировки запроса.
источник