hrustik
@hrustik
Веб разработчик

Yii2 проблема с пагинацией, GridView пагинация как?

Добрый день. Без связки 2-х таблиц пагинация работает отлично, но с hasMany не работает.

Controller:

$users = User::find()->with('posts')->where(['email' => $_SESSION['auth']]);

$countQuery = clone $users;
$pages = new Pagination(['totalCount' => $countQuery->count(), 'defaultPageSize' => 3]);
$models = $users->offset($pages->offset)
        ->limit($pages->limit)
        ->all();


    $this->view->title = "Личный кабинет";
    return $this->render('index', compact('postForm', 'models', 'pages'));


View:

<div id="posts" class="panel-body">

            <?php foreach ($models as $user): ?>
                <?php $posts = $user->posts ?>

                <?php foreach ($posts as $post): ?>
                    <h2><?= $post->title ?></h2>
                    <p><?= $post->text ?></p>
                <?php endforeach; ?>

            <?php endforeach; ?>

            <?php echo LinkPager::widget([
                'pagination' => $pages,
                'registerLinkTags' => true
            ]); ?>

        </div>


В результате при запуске происходит вывод всех постов у текущего пользователя, но увы не происходит Лимита (3) - как указано в контроллере , а также нет отображения виджета пагинаци в виде. Ошибок не возникает...

Пытаюсь применить GridView, но не понимаю как вывести связь с таблицей posts

Controller:

$dataProvider = new ActiveDataProvider(['query' => User::find()->asArray()->where(['email' => $_SESSION['auth']])->with('posts'),]);

$this->view->title = "Личный кабинет";
return $this->render('index', compact('postForm', 'users', 'dataProvider'));


View:

<div id="posts" class="panel-body">
<?= GridView::widget([
'dataProvider' => $dataProvider,
]); ?>
</div>
  • Вопрос задан
  • 424 просмотра
Пригласить эксперта
Ответы на вопрос 1
qonand
@qonand
Software Engineer
В результате при запуске происходит вывод всех постов у текущего пользователя, но увы не происходит Лимита (3) - как указано в контроллере , а также нет отображения виджета пагинаци в виде. Ошибок не возникает...

И не может произойти, лимит указывается на основную выборку а не реляцию ... т.е. по факту Вы хотите создать по одной пагинации для каждого пользователя?
Пытаюсь применить GridView, но не понимаю как вывести связь с таблицей posts

GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        'posts.title',
        'posts.text'
    ]
]);
Ответ написан
Ваш ответ на вопрос

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

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