Yii:CGridView中dataProvider的格式
Posted
技术标签:
【中文标题】Yii:CGridView中dataProvider的格式【英文标题】:Yii: Format of dataProvider in CGridView 【发布时间】:2013-09-16 16:57:54 【问题描述】:CGridView中显示数据的数组格式是什么。
我将数组发送到 dataProvider,但浏览器中没有任何内容。
我在我的模型中使用下面的代码
public function ExtensionList()
// I'm Using 2 database So I'm calling db2->createCommand
$row = Yii::app()->db2->createCommand(array(
'select' => array('extension', 'date_created'),
'from' => 'extensions',
'where' => "extension_type = 'EXTENSION'",
))->queryAll();
return $row ;
我的索引.php
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'extension-grid',
'dataProvider'=>$model->ExtensionList(),
'columns'=>array(
'extension',
'date_created',
),
)); ?>
下面的数组格式有什么问题。
数组 ( [0] => 数组 ( [extension] => 2000 [date_created] => 2013-07-24 21:15:09.993303)[1] => 数组([扩展名] => 2001 [date_created] => 2013-07-24 21:23:07.94538) [2] => 数组 ( [扩展] => 2002 [date_created] => 2013-07-26 11:58:59.537204))
如果我使用下面的代码,网格将显示在我的另一个模型中
$criteria=new CDbCriteria;
$criteria->select='service_id,count(*) as counts';
$criteria->condition = "sdate between '$this->startdate' and '$this->enddate'";
$criteria->group ='service_id';
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'pagination' => array( 'pageSize' => 30 ),
));
我正在使用这种类型来执行查询,它工作正常并且记录显示在网格中。
但是要显示我正在使用 createCommand 的扩展列表,它不起作用。
$row = Yii::app()->dbcc->createCommand(array(
'select' => array('extension', 'extension_type', 'date_created'),
'from' => 'accounts',
'where' => "extension_type = 'EXTENSION'",
))->queryAll();
return new CActiveDataProvider($this, array(
'criteria'=> $row ,
));
注意:我使用的是 Yii 1.1.13
【问题讨论】:
【参考方案1】:CGridView::dataProvider
属性必须设置为 IDataProvider
的实例,您不能直接将其设置为数组并期望它能够工作。
直接的解决方法是创建一个CArrayDataProvider
并使用它:
'dataProvider'=> new CArrayDataProvider($model->ExtensionList()),
也就是说,使用这样的原始 SQL 获取结果集并将其提供给愚蠢的 CArrayDataProvider
不是“Yii 方式”做事并暗示你走错了路。从问题中不清楚您到底在做什么,但请考虑改用CActiveDataProvider
或CSqlDataProvider
。
【讨论】:
嗨,谢谢你的回答,现在我喜欢这个 'dataProvider' => new CArrayDataProvider($model->ExtensionList()),但我收到错误未定义索引:id在 /var/www/Yii/yii-1.1.13.e9e4a0/framework/web/CArrayDataProvider.php(108) 你需要指定CArrayDataProvider的id来唯一标识每条记录。【参考方案2】:have a look at CArrayDataProvider documentationyou 选择 id 并将其用作 CArrayDataProvider 中的唯一标识符
'dataProvider'=> new CArrayDataProvider($model->ExtensionList(), array('id' =>'extension' ))
,
【讨论】:
以上是关于Yii:CGridView中dataProvider的格式的主要内容,如果未能解决你的问题,请参考以下文章