J'ai besoin de classer les données par deux colonnes (lorsque les lignes ont des valeurs différentes pour la colonne numéro 1, triez-les; sinon, triez par colonne numéro 2)
J'utilise un QueryBuilder
pour créer la requête.
Si j'appelle la orderBy
méthode une deuxième fois, elle remplace tous les ordres spécifiés précédemment.
Je peux passer deux colonnes comme premier paramètre:
->orderBy('r.firstColumn, r.secondColumn', 'DESC');
Mais je ne peux pas passer deux directions de classement pour le deuxième paramètre, donc lorsque j'exécute cette requête, la première colonne est ordonnée dans une direction ascendante et la seconde, décroissante. Je voudrais utiliser la descente pour les deux.
Y a-t-il un moyen de faire cela en utilisant QueryBuilder
? Dois-je utiliser DQL?
la source
alias.column_name
.Dans Doctrine 2.x, vous ne pouvez pas passer des ordres multiples en utilisant la doctrine 'orderBy' ou 'addOrderBy' comme dans les exemples ci-dessus. Parce que, il ajoute automatiquement le «ASC» à la fin du nom de la dernière colonne lorsque vous avez laissé le second paramètre vide, comme dans la fonction «orderBy».
Pour un exemple
->orderBy('a.fist_name ASC, a.last_name ASC')
, affichera SQL quelque chose comme ceci 'ORDER BY first_name ASC, last_name ASC ASC'. Il s'agit donc d'une erreur de syntaxe SQL. Simplement parce que la valeur par défaut de orderBy ou addOrderBy est «ASC».Pour ajouter plusieurs commandes, vous devez utiliser la fonction «ajouter». Et ce sera comme ça.
->add('orderBy','first_name ASC, last_name ASC')
. Cela vous donnera le SQL correctement formaté.Plus d'informations sur la fonction add (). https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/query-builder.html#low-level-api
J'espère que cela t'aides. À votre santé!
la source
vous pouvez utiliser
->addOrderBy($sort, $order)
Ajouter: Doctrine Querybuilder btw. utilise souvent des modifications de « spéciales » des méthodes normales, voir
select-addSelect
,where-andWhere-orWhere
,groupBy-addgroupBy
...la source
Le commentaire des
orderBy
notes de code source:Keys are field and values are the order, being either ASC or DESC.
. Alors vous pouvez le faireorderBy->(['field' => Criteria::ASC])
.la source
La
orderBy
méthode nécessite soit deux chaînes, soit unExpr\OrderBy
objet. Si vous souhaitez ajouter plusieurs déclarations d'ordre, la bonne chose est d'utiliser uneaddOrderBy
méthode ou d'instancier unOrderBy
objet et de le remplir en conséquence:la source