Tenho lido a documentação do Doctrine, mas não consegui encontrar uma maneira de classificar os resultados de findAll ().
Estou usando a doutrina do symfony2 +, esta é a instrução que estou usando dentro do meu controlador:
$this->getDoctrine()->getRepository('MyBundle:MyTable')->findAll();
mas quero que os resultados sejam ordenados por nomes de usuário em ordem crescente.
Tenho tentado passar um array como argumento desta forma:
findAll( array('username' => 'ASC') );
mas não funciona (também não reclama).
Existe alguma maneira de fazer isso sem construir uma consulta DQL?
fonte
fonte
Simples:
fonte
É útil olhar o código-fonte às vezes.
Por exemplo, a
findAll
implementação é muito simples (vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php
):Então, olhamos
findBy
e encontramos o que precisamos (orderBy
)fonte
Isso funciona para mim:
Manter o primeiro array vazio recupera todos os dados, funcionou no meu caso.
fonte
Veja o código-fonte da API Doctrine:
fonte
Você precisa usar um critério, por exemplo:
fonte
O método findBy no Symfony excede dois parâmetros. O primeiro é o array de campos que você deseja pesquisar e o segundo array é o campo de classificação e sua ordem
fonte
Você pode classificar um ArrayCollection existente usando um iterador de matriz.
assumindo que $ collection é seu ArrayCollection retornado por findAll ()
Isso pode ser facilmente transformado em uma função que você pode colocar em seu repositório para criar o método findAllOrderBy ().
fonte
Experimente isto:
fonte
Eu uso uma alternativa para a solução que escreveu nifr.
É mais rápido do que a cláusula ORDER BY e sem a sobrecarga do Iterator.
fonte
Modifique a função findAll padrão em EntityRepository assim:
Dessa forma, você pode usar o '' findAll '' em qualquer consulta para qualquer tabela de dados com uma opção para classificar a consulta
fonte