2016-10-03 9 views
1

グリッドビューに表示する色々な時間に作成された色付きボールがあります。Yii2 Gridview:複数の列をソートする方法は?

  • ボール - として移入

のcreated_at ID、色、:私はボールが新しい順に表示させたいが、私はまた、注文することができるようにしたいデフォルトとして

1, red , 2010-10-09 
2, blue , 2010-11-08 
3, blue , 2010-09-01 
4, red , 2010-06-15 

ボールを色で表示するので、私はBallSearchモデルで次の検索機能を設定しました:

public function search() 
{ 
    $query = Ball::find(); 

    $dataProvider = new ActiveDataProvider([ 
     'query' => $query, 
     'sort' => [ 
      'attributes' => [ 
       'color', 
       'created_at', 
      ], 
      'defaultOrder'=> ['created_at' => SORT_DESC] 
     ], 
    ]); 

    return $dataProvider; 
} 

これはある点までは機能しますが、色で並べ替えると、私は分かりやすいように最新の最初のソートを失います。これは、ソート順の前に適用されません取得し、結果はもはや順序付けられ

... 
$query = Ball::find()->orderBy(['created_at' => SORT_DESC]); 
... 

:私は検索クエリに最新の第一の条件を置けば、

2, blue , 2010-11-08 
3, blue , 2010-09-01 
1, red , 2010-10-09 
4, red , 2010-06-15 

残念ながら、私は本当にこの結果たいと思いますGridViewの順序付けは効果的ではありません。

複雑な条件を各属性の順序に結びつけることなく、この基本的な二次順序を指定する方法はありますか?

これは一般的な使用例です。

答えて

1

あなたは、単に試みることができる:

'sort' => [ 
    'attributes' => [ 
     'color' => [ 
      'asc' => ['color' => SORT_ASC, 'created_at' => SORT_DESC], 
      'desc' => ['color' => SORT_DESC, 'created_at' => SORT_ASC], 
     ], 
     'created_at', 
    ], 
    'defaultOrder'=> ['created_at' => SORT_DESC] 
], 

Sortingについては、こちらをご覧ください。

+0

美しい、夢のような作品..ありがとう! – Arth

関連する問題