Yii2 как сделать связь многие ко многим с условием?

141
11 октября 2019, 08:20

Не совсем понимаю один момент, например, есть три связанные таблицы: статья, теги и связующая таблица id_tag и id_post. Сделать просто вывод по всем трём таблицам, не составило труда, но если я вписываю условие, то бд выдает ошибку

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tags_post.tag_id' in 'where clause' The SQL being executed was: SELECT * FROM blog WHERE tags_post.tag_id='3'

Код в контроллере:

public function actionCategory($id){
    $blog = Blog::find()
        ->where(['tags_post.tag_id' => $id])
        ->with('tags')
        ->all();
    return $this->render('blog', ['blog' => $blog]);
}

Без условия WHERE все работает, но как тогда это можно реализовать? Это кстати, метод из модели ActiveRecord

public function getTags(){
        return $this->hasMany(Tags::classname(), ['tag_id' => 'tag_id'])
            ->viaTable('tags_post', ['post_id' => 'id']);   
    }
Answer 1

У Вас же запрос строится без соединения со связанной таблицей. Попробуйте так:

public function actionCategory($id){
    $blog = Blog::find()
        ->joinWith('tags')
        ->where(['tags_post.tag_id' => $id])        
        ->all();
    return $this->render('blog', ['blog' => $blog]);
}
READ ALSO
Передача переменной с js в php

Передача переменной с js в php

Есть скрипт, который производит умножение двух чисел

101
MinGW-w64. Не работает элементарный алгоритм

MinGW-w64. Не работает элементарный алгоритм

Я читаю книгу "Олимпиадное программирование" Лааксонена и я попробовал предложенный в этой книге алгоритм перебора с возвратом для решения...

122
memory leaks при использовании pop_back()

memory leaks при использовании pop_back()

Для удаления последнего элемента в векторе использую pop_back()

111