Задать вопрос

Выбор постов через hasMany по передаваемой метке в url?

Доброго времени !
В url передаю slug метки (по slug могу получить id метки), по которой хочу вывести все прикрепленные к ней посты
Имеется табличка "tags" с метками, у таблицы такие колонки
id | name | slug
Так же вторая табличка "statjiblogtags" в которой храню связь, такие колонки у нее
post_id | tag_id
Не пойму как через hasMany прописать зависимости, чтобы из таблицы "statjiblog" вывести мои статьи
Заранее спасибо.
  • Вопрос задан
  • 190 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
class Tags extends ActiveRecord
{
    public function getPages()
    {
         return $this->hasMany(Statjiblog::className(), ['id' => 'post_id'])->viaTable('{{%statjiblogtags}}', ['tag_id' => 'id']);
    }
}


public function actionPage($slug){
  $model = Tags::find()->andWhere(['slug'=>$slug])->one();
  foreach($model->pages as $page){
      echo $page->title;
  }
}

Ну или с другой строны, через join;
Ответ написан
@PRC Автор вопроса
Кому интересно как реализовать пагинацию относительно моего случая:
В контролере пишете так:
$model = Tags::find()->andWhere(['slug'=> Yii::$app->getRequest()->getQueryParam('slug') ])->one();
        
        $query = $model->getPosti();
        $pagination = new Pagination([
            'defaultPageSize' => 1,
            'totalCount' => $query->count()
        ]);

        $query = $query->orderBy(['id' => SORT_DESC])
            ->offset($pagination->offset)
            ->limit($pagination->limit)
            ->all();

        return $this->render('tag', [
            'model' => $query,
            'pagination' => $pagination

            ]);

А views шаблоне где хотите вывести пишете так:
<?=  LinkPager::widget([
        'pagination' => $pagination,
        'nextPageLabel' => '&raquo;',
        'hideOnSinglePage' => true,
        //'firstPageLabel' => 'В начало',
        //'lastPageLabel' => 'В конец',
        'prevPageLabel' => '&laquo;'

    ]) ?>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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