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