Вывод таблицы стандартным GridView

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
phpCoder88
Сообщения: 6
Зарегистрирован: 2018.06.14, 14:22

Вывод таблицы стандартным GridView

Сообщение phpCoder88 » 2019.01.30, 12:57

Всем привет!

В базе есть несколько таблиц: фильмы, актеры и кросстаблица для их соединения. В моделях все связи настроены.

На странице нужно вывести список фильмов и в одной из колонок список актеров для каждого фильма.

Код: Выделить всё

	$query = Films::find()
            ->joinWith('acters');

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'sort' => [
                'defaultOrder' => [
                    'created_at' => SORT_DESC,
                ]
            ],
        ]);
и вывод

Код: Выделить всё

echo GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

           /*описание колонок*/

            [
                'attribute' => 'acter_names',
                'format' => 'html',
                'value' => function($model){
                    if (empty($model->acters)) {
                        return null;
                    }
		    /*Вывод списка актеров*/
                }
            ],

        ],
    ]);
Все отлично выводится, но строка над таблицей вида "Показаны записи 1-9 из 14." выдает неправильные данные. Фильмов в базе всего 9 и они как раз показываются, а 14 появилась из-за объединения таблиц.
Как сделать, чтобы данные выводились корректные?

Вариант запроса актеров для каждого фильма не подходит.

dmg
Сообщения: 671
Зарегистрирован: 2012.10.15, 03:09

Re: Вывод таблицы стандартным GridView

Сообщение dmg » 2019.01.30, 14:44

Код: Выделить всё

$query = Films::find()
            ->with('acters');

Аватара пользователя
Alexum
Сообщения: 669
Зарегистрирован: 2016.09.26, 10:00

Re: Вывод таблицы стандартным GridView

Сообщение Alexum » 2019.01.30, 17:23

Почитайте про ->distinct(), есть нюансы.

phpCoder88
Сообщения: 6
Зарегистрирован: 2018.06.14, 14:22

Re: Вывод таблицы стандартным GridView

Сообщение phpCoder88 » 2019.01.31, 17:19

Спасибо за помощь! С методом with все отлично получилось)))

andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Вывод таблицы стандартным GridView

Сообщение andku83 » 2019.02.04, 20:33

phpCoder88 писал(а):
2019.01.31, 17:19
Спасибо за помощь! С методом with все отлично получилось)))
если нужно будет добавлять фильтрацию по актерам, тогда ->joinWith() вернется и проблема решится:

Код: Выделить всё

->groupBy('films.id')

// или

->distinct()   // как было выше сказано

Ответить