Yii2 Gridview:如何对多列进行排序?

时间:2016-10-03 13:43:37

标签: gridview yii2

假设我在不同时间创建了许多彩球,我希望在GridView中显示。

  • Ball - id,color,created_at

填充为:

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;
}

这可以达到一定的目的,但按颜色排序时,我可以理解地失去了最新的第一次排序。我真的很喜欢这个结果:

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

不幸的是,如果我在查询查询中添加最新的第一个条件:

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

它在排序顺序之前应用,结果不再按颜色排序,并且GridView排序无效。

无论如何都要指定这个基础二级排序而不将复杂条件连同到每个属性顺序?

在我看来,这是一个常见的用例。

1 个答案:

答案 0 :(得分: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