serg_small_developer
@serg_small_developer
Начинающий прогер

Как сделать сортировку?

Всем привет, никак не могу придумать как сделать, есть 2 таблицы, в одной храню Таблица1(фразу, частоту) в другой Таблица2(id фразы, позицию, дату), отношение hasMany, нужно сделать так чтобы вывод был таким
7cf606ac3db6.jpg
сейчас я беру search модель Таблица1 и через GridView делаю вывод фраз, предварительно я получаю последние несколько уникальних дат из Таблица2 через distinct, и потом я просто беру в GridView через функцию из модели получаю нужную позицию по определенному дню
'value' => function ($model) use ($distinct, $key) {
	return $model->ProjectKeywordsPosition($distinct, $key);
}

все выходит как нужно, пагинация по десятку фраз (фраз может быть десятки тысяч), быстрая загрузка page, все нормально, но только не могу понят как сделать сортировку по столбцам дата1, дата2 и т.д., без этой сортировки вообще никак
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 2
@iSensetivity
бухгалтер, програміст-самоук
Сложно сказать наверняка, но вам стоит подключать связную таблицу через joinWith(), а потом в DataProvider задать столбцьі из другой таблицьі. Пример, у меня тут через joinWith() подключается таблица program.

'sort' => [
                'attributes' => [
                    'id',
                    'program_name' => [
                        'asc' => ['program.name' => SORT_ASC, 'sector.name' => SORT_ASC, ],
                        'desc' => ['program.name' => SORT_DESC, 'sector.name' => SORT_DESC,],
                        'default' => SORT_ASC,
                    ],
],
]
Ответ написан
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Даты Вам известны, значит создаете в моделе с Keywords три связи, по которым тянете hasOne в каждой своя дата. Да, это 3 запроса, а не 1 если hasMany, но зато потом просто работать с этим. Можно делать join и т.д.
Можно конечно средствами sql построить 1 красивый запрос, но тогда Вы не получите объекты AR и не получится юзать gridView и т.д.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы