データを2列で並べ替える必要があります(行の列番号1の値が異なる場合は並べ替え、それ以外の場合は列番号2で並べ替え)
QueryBuilder
を使用してクエリを作成しています。
orderBy
メソッドをもう一度呼び出すと、以前に指定された順序が置き換えられます。
最初のパラメーターとして2つの列を渡すことができます。
->orderBy('r.firstColumn, r.secondColumn', 'DESC');
しかし、2番目のパラメーターに2つの順序方向を渡すことはできないため、このクエリを実行すると、最初の列は昇順で、2番目の列は降順で順序付けられます。両方に降順を使用したいと思います。
QueryBuilder
を使用してこれを行う方法はありますか? DQLを使用する必要がありますか?
列名の直後に順序の方向を追加する必要があります。
$qb->orderBy('column1 ASC, column2 DESC');
既に述べたように、orderBy
への複数の呼び出し スタックしない ですが、 addOrderBy
への複数の呼び出しを行うことができます。
$qb->addOrderBy('column1', 'ASC')
->addOrderBy('column2', 'DESC');
Doctrine 2.xでは、上記の例のようにdoctrine 'orderBy'または 'addOrderBy'を使用して複数の注文を渡すことはできません。なぜなら、「orderBy」関数などで2番目のパラメーターを空白のままにすると、最後の列名の最後に「ASC」が自動的に追加されるためです。
たとえば、->orderBy('a.fist_name ASC, a.last_name ASC')
は、「ORDER BY first_name ASC、last_name ASC ASC」のようなSQLを出力します。したがって、これはSQL構文エラーです。単に、orderByまたはaddOrderByのデフォルトが「ASC」だからです。
複数の注文を追加するには、「追加」機能を使用する必要があります。そして、このようになります。
->add('orderBy','first_name ASC, last_name ASC')
。これにより、正しくフォーマットされたSQLが得られます。
Add()関数の詳細。 https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/query-builder.html#low-level-api
お役に立てれば。乾杯!
->addOrderBy($sort, $order)
を使用できます
追加:Doctrine Querybuilder btw。多くの場合、通常のメソッドの「特別な」変更を使用します。select-addSelect
、where-andWhere-orWhere
、groupBy-addgroupBy
...を参照してください。
orderBy
ソースコードに関するコメント:Keys are field and values are the order, being either ASC or DESC.
。したがって、orderBy->(['field' => Criteria::ASC])
を実行できます。