проблема с paginatin и dataprovider, когда я присоединяюсь к таблицам - PullRequest
0 голосов
/ 27 апреля 2019

Я хочу выбрать некоторую запись из 4 таблиц, 1 основной таблицы: «пользователь» и 3 других таблиц (название модели: t1, t2, t3), и между «пользователем» и 3 существует отношение один ко многим.В другой таблице я хочу выбрать все записи из таблицы user, которые находятся в одной из трех таблиц. Если в трех таблицах нет информации в каждой из них, то запись не будет выбрана из таблицы user.

Я использую из CDbCriteria, я думаю, что условие в $ критериям правильное, Выберите правильные данные.Потому что нет проблем, если я не использую нумерацию страниц и все записи отображаются по одной на странице просмотра.(Виджет CGridView)

но в нумерации страниц у меня есть проблема.после этого мои ставки выполняются нумерацией страниц.Например: если pageSize of pagination - 20. Выберите 20 записей из пользовательской таблицы, и 13 из этих 20 чисел связаны с другими таблицами.Первая страница страницы просмотра показывает только 13 пользователей. На странице просмотра должно быть 20 записей.И поэтому на каждой странице отображается несколько разных записей.Он выбирает из 20 записей и удаляет записи, которые не содержат условие.То, что остается, отображается, это приведет к тому, что количество строк будет неправильным.

$criteria = new CDbCriteria();
            $criteria = array(
               'with' => array(
                    't1' => array(
                       'together' => true,
                        'joinType' => 'LEFT  JOIN',

                    ),
                    't2' => array(
                       'together' => true,
                        'joinType' => 'LEFT JOIN',

                   ),
                     't3' => array(
                       'together' => true,
                        'joinType' => 'LEFT JOIN',

                  ),
                ),
                 'condition' => '(t1.user_Id=user.id or t2.user_Id=user.id or t3.user_Id=user.id ) ',

            );


            $dataProvider = new CActiveDataProvider('User',  array(

                 'pagination' => array(
                    'pageSize' => '20',
                ),
                 'criteria' => $criteria,
                'sort' => array(
                   'defaultOrder' => 'username DESC',
                ),   
                    ));

Displaying only 13 records instead of 20

Displaying only 10 records instead of 20

Displaying only 4 records instead of 20

Displaying only 3 records instead of 20!!

...