@elizaveta_kotik

Как правbльно построить запрос из связанных таблиц?

tag.php
public function getArticles()
    {
        return $this->hasMany(Article::className(), ['id' => 'article_id'])
            ->viaTable('article_tag', ['tag_id' => 'id']);
    }

    public function getArticlesCount()
    {
        return $this->getArticles()->count();
    }

    public static function getAll()
    {
        return Tag::find()->all();
    }

    public static function getArticlesByTags($id)
    {
        // build a DB query to get all articles
        $query = Article::find()->where(['tag_id'=>$id]);

        // get the total number of articles (but do not fetch the article data yet)
        $count = $query->count();

        // create a pagination object with the total count
        $pagination = new Pagination(['totalCount' => $count, 'pageSize'=>6]);

        // limit the query using the pagination and retrieve the articles
        $articles = $query->offset($pagination->offset)
            ->limit($pagination->limit)
            ->all();

        $data['articles'] = $articles;
        $data['pagination'] = $pagination;

        return $data;
    }


выдаёт следующую ошибку:
efb417552b8b44e89a7559f19bfb4ad7.png

Я понимаю, что неправильный запрос, т.к. в таблице article нет поля tag_id, это поле есть в таблице article_tag. Как его изменить?
$query = Article::find()->where(['tag_id'=>$id]);
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Arik
Можно сделать обратно. в модели тэгов сделать тоже связь (со статьями) и по ней тянуть статьи, т.е. по ID не составит проблем найти тэг, а тэг по связи даст вам все свои статьи.
Ответ написан
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Можно было бы сделать join, но если бы было hasOne, для hasMany воспользуйтесь советом Arik
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы