J'essaie de trier un tableau d'objets par nom en symfony. Mais je ne sais pas comment faire cela, car les cordes commencent avec des chiffres afin que la commande ne soit pas bonne.
J'ai essayé avec un querybuilder dans mon référentiel: p>
$qb = $this->createQueryBuilder('arrondissement')
->addOrderBy('arrondissement.nom', 'ASC');
$query = $qb->getQuery();
return $query->execute();
3 Réponses :
Vous ne pouvez pas trier les chaînes / objets par ordre naturel facilement dans la doctrine. Mais vous pouvez le trier dans php: Si vous avez vraiment besoin de trier dans la base de données pour une raison quelconque, consultez cette question connexe: Tri naturel dans MySQL (en supposant MySQL ici) p> p> strnatcmp code> comparera selon "nature naturelle", qui interprète "1" <"2" <"10" <"10" <"20", même si d'autres lettres sont ajoutées. p> USort code> peut Appliquez une fonction de tri personnalisée sur un tableau - ce qui est requis ici, car vous souhaitez accéder à un sous-élément (nom) de votre élément de tableau (un objet). - Sinon, vous pourriez avoir simplement utilisé Natsort. P>
Merci pour votre réponse, mais j'ai une erreur et je ne sais pas comment le résoudre: appelez à une fonction membre getnom () sur int
@ Alizée Oh, mon mauvais, avait une petite erreur ... il devrait être Uasort ou Usort au lieu d'Uksort. Mise à jour de la réponse pour refléter cela.
Vous pouvez utiliser php retournera: p> natsort code> par exemple:
Dans ce cas, vous ne devez pas strong> ne doit pas strud> modifier la commande via PHP, mais utilisez le tri de la base de données pour cela.
Voici ma proposition de modifier votre constructeur de requête: P>
$qb = $this->createQueryBuilder('arrondissement')
->add( 'orderBy', 'CAST(arrondissement.nom AS UNSIGNED), arrondissement.nom')
$query = $qb->getQuery();
return $query->execute();
Il est trié par ordre alphabétique. Le résultat que vous voulez n'est pas un ordre alphabétique, vous devez donc la mettre en œuvre vous-même.
parce que les chaînes commencent avec des chiffres afin que la commande ne soit pas bonne. Code> Qu'est-ce que cela signifie?L'ordre de maintenant est que cela commence par tous les 1 (1, 10, 11, 18 ...) puis les 2 (2, 20 ...), 3, 4 ... pendant que je veux que ce soit 1, 2,3,4