Ich muss Daten nach zwei Spalten sortieren (wenn die Zeilen unterschiedliche Werte für Spalte 1 haben, sortieren Sie danach; andernfalls sortieren Sie nach Spalte 2).
Ich verwende a QueryBuilder
, um die Abfrage zu erstellen.
Wenn ich die orderBy
Methode ein zweites Mal aufrufe, ersetzt sie alle zuvor angegebenen Ordnungen.
Ich kann zwei Spalten als ersten Parameter übergeben:
->orderBy('r.firstColumn, r.secondColumn', 'DESC');
Ich kann jedoch nicht zwei Ordnungsrichtungen für den zweiten Parameter übergeben. Wenn ich diese Abfrage ausführe, wird die erste Spalte in aufsteigender und die zweite in absteigender Richtung geordnet. Ich würde gerne absteigend für beide verwenden.
Gibt es eine Möglichkeit, dies mit zu tun QueryBuilder
? Muss ich DQL verwenden?
quelle
alias.column_name
.In Doctrine 2.x können Sie keine Mehrfachreihenfolge übergeben, indem Sie die Doktrin 'orderBy' oder 'addOrderBy' wie in den obigen Beispielen verwenden. Weil es automatisch den 'ASC' am Ende des letzten Spaltennamens hinzufügt, wenn Sie den zweiten Parameter leer gelassen haben, wie in der 'orderBy'-Funktion.
In einem Beispiel
->orderBy('a.fist_name ASC, a.last_name ASC')
wird SQL wie folgt ausgegeben: 'ORDER BY first_name ASC, last_name ASC ASC'. Das ist also ein SQL-Syntaxfehler. Einfach, weil der Standardwert von orderBy oder addOrderBy 'ASC' ist.Um mehrere Bestellungen nach hinzuzufügen, müssen Sie die Funktion "Hinzufügen" verwenden. Und es wird so sein.
->add('orderBy','first_name ASC, last_name ASC')
. Dadurch erhalten Sie das korrekt formatierte SQL.Weitere Informationen zur Funktion add (). https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/query-builder.html#low-level-api
Hoffe das hilft. Prost!
quelle
Sie können verwenden
->addOrderBy($sort, $order)
Hinzufügen: Doctrine Querybuilder übrigens. oft verwendet „spezielle“ Modifikationen der normalen Methoden finden
select-addSelect
,where-andWhere-orWhere
,groupBy-addgroupBy
...quelle
Der Kommentar für
orderBy
Quellcode-Hinweise :Keys are field and values are the order, being either ASC or DESC.
. So können Sie tunorderBy->(['field' => Criteria::ASC])
.quelle
Die
orderBy
Methode erfordert entweder zwei Zeichenfolgen oder einExpr\OrderBy
Objekt. Wenn Sie mehrere Auftragserklärungen hinzufügen möchten, müssen Sie dieaddOrderBy
Methode verwenden oder einOrderBy
Objekt instanziieren und entsprechend füllen :quelle