Страница 1 из 1

Many-to-many сортировка данных в search модели.

Добавлено: 2017.08.21, 19:42
za4me
День добрый.
Подскажите, пожалуйста как следующее можно сделать более правильно/проще?

Есть три таблицы:
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');
}
И $model->currentTags отдает модели тегов назначенных для article.

В GridView есть аттрибут searchTag в фильтре которого массив с тегами вида

Код: Выделить всё

['id' => 'tag']
В ArticlesSearch идет фильтрация следующим образом

Код: Выделить всё

$query->joinWith('tagArticles')->filterWhere(['tag_id' => $this->searchTag]);
Что-то подсказывает что последний пункт можно сделать проще и понятнее, т.к. сейчас связь getTagArticles() в принципе не нужна, даже для получения списка тегов текущей записи т.к. можно их получить через joinWith.

Всем спасибо за советы.