如何在Yii中使用CDataProvider创建我自己的数据提供程序


How to create my own DataProvider in Yii using CDataProvider?

我的情况是这样的。我正在使用CSqlDataProvider及其分页(页面大小)获取一些数据,其内部使用限制和偏移量。然后是

$rawData = $sqldp->getData();

现在我需要做一些处理和添加额外的数据。现在我得到

$modRawData = modify ($rawData);

现在,如果我创建一个CArrayDataProvider转换成一个数据提供者,这样我就可以使用CListView。

但是我的问题在这里。现在我无法执行分页操作。如果我使用clinkager,这是可能的。但是,是否有其他方法可以让我创建自己的DATAPROVIDER并在创建DATAPROVIDER时处理分页

您可以直接创建CArrayDataProvider,如下所示:

$rawData=Yii::app()->db->createCommand('SELECT * FROM table')->queryAll(); //fetches array of associative arrays representing selected rows
            $dataProvider=new CArrayDataProvider($rawData, array(
                'id'=>'consumer', //this is an identifier for the array data provider
                'sort'=>false,
                'keyField'=>'id', //this is what will be considered your key field
                'pagination'=>array(
                    'pageSize'=>30, //eureka! you can configure your pagination from here
                ),
            ));

现在你可以在CListView或CGridView中使用$dataProvider,比如

$this->widget('zii.widgets.grid.CGridView',array(
    'id'=>'consumer-grid',
    'dataProvider'=>$data,
    'columns'=>array( // this array should include the attributes you want to display
        'id',
        'name',
        'additional_column_1',
    ),
));

CArrayDataProvider的潜力可以匹配满足您的标准需求,而不需要太多的工作,尽管在某些情况下可能需要一些额外的过滤和排序工作。

我终于得到了答案。是的,我可以通过扩展CDataProvider来创建我的自定义数据提供者。但是我只需要实现三个函数

fetchData, fetchKeys, calculateTotalItemCount

最后你需要写你自己的逻辑到fetchData你想要的