Скажем, у меня есть несколько цветных шаров, созданных в разное время, которые я хочу отобразить в GridView.Yii2 Gridview: как сортировать по нескольким столбцам?
- Ball - идентификатор, цвет, 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 неэффективно.
Есть ли способ указать это второстепенное упорядочение без согласования сложных условий с каждым порядком атрибутов?
Мне кажется, что это обычный прецедент.
Красивый, работает как сон .. спасибо! – Arth