连接表时,paginatin和dataprovider出现问题

时间:2019-04-27 08:30:37

标签: php join pagination dataprovider yii1.x

我想从4个表,1个主表:“用户”和3个其他表中选择一些记录。(模型名称是:t1,t2,t3),“用户”和3之间存在一对多的关系其他桌子 我想从表用户中选择三个表之一中的所有记录,如果每个表中的3个表中都没有信息,那么将不会从表用户中选择记录。

我从CDbCriteria中使用,我认为$ criteria中的条件正确,请选择正确的数据。因为如果我不使用分页没有问题,并且所有记录一次显示在视图页面中,这是没有问题的。 (CGridView小部件)

但是在分页中我有问题。之后,我的投注进行分页。 例如: 如果分页的pageSize为20,请从用户表中选择20条记录,并将这20个数字中的13个链接到其他表。视图页面的第一页仅显示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!!

0 个答案:

没有答案