【问题标题】:Yii2 Gridview : how to sort on multiple columns?Yii2 Gridview:如何对多列进行排序?
【发布时间】:2016-10-03 13:43:36
【问题描述】:

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

  • 球 - id、颜色、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排序无效。

是否可以在不将复杂条件连接到每个属性顺序的情况下指定这个底层二级排序?

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

【问题讨论】:

    标签: gridview yii2


    【解决方案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的信息。

    【讨论】:

      猜你喜欢
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多