@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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы