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

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
za4me
Сообщения: 152
Зарегистрирован: 2016.06.26, 15:29
Контактная информация:

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

Сообщение za4me » 2017.08.21, 19:42

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

Есть три таблицы:
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.

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

Ответить