Many-to-many сортировка данных в search модели.
Добавлено: 2017.08.21, 19:42
День добрый.
Подскажите, пожалуйста как следующее можно сделать более правильно/проще?
Есть три таблицы:
1. articles (id|title|etc...)
2. tag (id|tag|etc...)
3. tag_articles (id|article_id|tag_id)
В articles есть связь:
И $model->currentTags отдает модели тегов назначенных для article.
В GridView есть аттрибут searchTag в фильтре которого массив с тегами вида
В ArticlesSearch идет фильтрация следующим образом
Что-то подсказывает что последний пункт можно сделать проще и понятнее, т.к. сейчас связь getTagArticles() в принципе не нужна, даже для получения списка тегов текущей записи т.к. можно их получить через joinWith.
Всем спасибо за советы.
Подскажите, пожалуйста как следующее можно сделать более правильно/проще?
Есть три таблицы:
1. articles (id|title|etc...)
2. tag (id|tag|etc...)
3. tag_articles (id|article_id|tag_id)
В articles есть связь:
Код: Выделить всё
public function getTagArticles()
{
return $this->hasMany(TagArticle::class, ['article_id' => 'id']);
}
public function getCurrentTags()
{
return $this->hasMany(Tag::class, ['id' => 'tag_id'])
->via('tagArticles');
}
В GridView есть аттрибут searchTag в фильтре которого массив с тегами вида
Код: Выделить всё
['id' => 'tag']
Код: Выделить всё
$query->joinWith('tagArticles')->filterWhere(['tag_id' => $this->searchTag]);
Всем спасибо за советы.