繁体   English   中英

Yii分页显示的项目少于可用项目

[英]Yii pagination showing fewer items than available

我有一个简单的CGridView,它来自CActiveDataProvider。 目前,我不确定这种情况发生了多长时间,它没有显示启用了pagenation的视图中的所有数据项。

我的标题显示“显示9个结果中的1-7个”,但没有更多页面的按钮。 如果我将数据提供程序的pagenation属性的pageSize设置为较小的数字,我最终将获得分页按钮,但它似乎在第一页上显示的项目少于第二页。 例如,如果我将CActiveDataProvider的pageSize设置为3,我会得到2,2,3(每页上的项目),而不是我预期的3,3,1。

如果我将pageSize设置为9到11之间的任何值,那么有些项目我看不到,因为我只有一页而不是所有项目都显示出来(如果我将pageSize设置为9,则“1-6 of 9”)。

$criteria=new CDbCriteria;
$criteria->with = array('registrations'); 
$criteria->addCondition('registrations.id IS NOT NULL');
$criteria->addCondition('registered = false');
$criteria->together = true;
$dataProvider = new CActiveDataProvider('Skier', array('criteria'=>$criteria));

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        array('name'=>'fullname', 'header'=>'Name'),
        array(
            'name'=>'programs_names',
            'header'=>'Programs',
            'value'=>'$data->programs_names',
        ),
        <More items here>
    )
));

任何人都知道什么会导致pagenation如此不稳定?

编辑 :此外,将CActiveDataProvider更改为CArrayDataProvider正常工作,我得到9个结果中的9个。 这将暂时起作用,因为我有小数据集,但我宁愿弄清楚问题可能是什么。

$dataProvider = new CArrayDataProvider(Skier::model()->findAll($criteria));

如果您正在使用复杂查询,请尝试使用此查询

$count=Yii::app()->db->createCommand('SELECT COUNT(*) FROM tbl_user')->queryScalar();

$sql='SELECT * FROM tbl_user';

$dataProvider=new CSqlDataProvider($sql, array(
    'totalItemCount'=>$count,
    'sort'=>array(
        'attributes'=>array(
             'id', 'username', 'email',
        ),
    ),
    'pagination'=>array(
        'pageSize'=>10,
    ),
));
// $dataProvider->getData() will return a list of arrays.

然后你可以将$ dataProvider传递给你的CGridView

有关使用自定义查询作为dataProvider的更多文档,请在此处查看。

我有这样的问题。 这是由于数据库中的重复条目(主键)。

我必须在if()放入$criteria->withtogether=true

if( (int) $this->categoria_id > 0) {
    $criteria->with = Array (
        'categorie'=> Array (
            'together' => true,
        )
    );
    $criteria->compare ('categorie.id', $this->categoria_id);
}

否则CActiveDataProvider together=true 分页 together=true并且没有参数传递返回错误的计数

例如,要显示所有记录, “计数行” ,然后“将$ countResult提供给pageSize”

首先计算行数(这是一个例子,'用户'='您的模型名称'))

$countResult = User::model()->countByAttributes(array('record_name' => $matched_record_name));

要么

$countResult = User::model()->count($condition);

然后将$ countResult提供给pageSize

            'pagination'=>array(
                'pageSize' => intval($countResult),
                )), 

尝试将以下内容添加到“Skier”模型的搜索方法中:

$criteria->group = "id";

要么:

$criteria->group = "t.id";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM