130

データを 2 列で並べ替える必要があります (行の列番号 1 の値が異なる場合は、その値で並べ替えます。それ以外の場合は、列番号 2 で並べ替えます)。

を使用しQueryBuilderてクエリを作成しています。

メソッドをもう一度呼び出すと、orderBy以前に指定した順序が置き換えられます。

最初のパラメーターとして 2 つの列を渡すことができます。

->orderBy('r.firstColumn, r.secondColumn', 'DESC');

しかし、2 番目のパラメーターに 2 つの順序付け方向を渡すことができないため、このクエリを実行すると、最初の列は昇順で、2 番目の列は降順で並べ替えられます。両方に降順を使用したいと思います。

を使用してこれを行う方法はありQueryBuilderますか? DQL を使用する必要がありますか?

4

6 に答える 6

245

列名の直後に順序方向を追加する必要があります。

$qb->orderBy('column1 ASC, column2 DESC');

ご指摘のとおり、 への複数回の呼び出しorderBy はスタックしませんが、 への複数回の呼び出しを行うことができますaddOrderBy

$qb->addOrderBy('column1', 'ASC')
   ->addOrderBy('column2', 'DESC');
于 2012-07-20T08:11:01.213 に答える
10

あなたが使用することができます->addOrderBy($sort, $order)

追加:Doctrine Querybuilderところで。多くの場合、通常の方法の「特別な」変更を使用します。 select-addSelectwhere-andWhere-orWheregroupBy-addgroupBy...を参照してください。

于 2012-07-20T08:17:34.637 に答える
0

orderByソース コード ノートのコメント: Keys are field and values are the order, being either ASC or DESC.. だからあなたはすることができますorderBy->(['field' => Criteria::ASC])

于 2018-11-02T00:13:02.520 に答える