gridview - Yii2 GridView : how to sort on multiple columns?

标签 gridview yii2

假设我有一些在不同时间创建的彩色球,我希望在 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 排序无效。

有没有办法在不为每个属性顺序添加复杂条件的情况下指定这个底层次级顺序?

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

最佳答案

你可以简单地尝试:

'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 的信息.

关于gridview - Yii2 GridView : how to sort on multiple columns?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39833160/

相关文章:

image - 如何在 GridView 中显示多列图像?

javascript - 如何在 php 中将数组值设置为 javascript 函数闭包?

mysql - yii2 gridView 仅显示唯一行

error-handling - Yii2,模块错误页面不显示,但在错误 404 时显示空白页面

asp.net - 如何突出显示 Gridview 中的最大值

c# - Gridview数据绑定(bind)下拉列表和更新

android - 在 gridview 中显示动画 gif

c# - 如何使用 C# 根据条件更改 gridview 单元格颜色

yii2 - 如何在 Yii2 中将 textInput 设置为 readOnly?

Yii2 查看日期时间格式 (d-m-Y H :i:s) But When Save/update in DB Change format to Y-m-d H:i:s