0

在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 ;

               }

我的 Index.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] => 数组 ( [extension] => 2001 [date_created] => 2013 -07-24 21:23:07.94538) [2] => 数组 ([extension] => 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

4

2 回答 2

0

CGridView::dataProvider属性必须设置为 的实例IDataProvider,您不能直接将其设置为数组并期望它起作用。

直接的解决方法是创建一个CArrayDataProvider并使用它:

'dataProvider'=> new CArrayDataProvider($model->ExtensionList()),

也就是说,使用这样的原始 SQL 获取结果集并将其提供给哑巴CArrayDataProvider并不是“Yii 方式”做事并暗示你走错了路。从问题中不清楚您到底在做什么,但请考虑使用CActiveDataProviderorCSqlDataProvider代替。

于 2013-09-12T10:45:18.373 回答
0

查看 CArrayDataProvider 文档,您选择 id 并将其用作 CArrayDataProvider 中的唯一标识符

'dataProvider'=> new CArrayDataProvider($model->ExtensionList(), array('id' =>'extension' )),

于 2013-09-12T11:55:35.523 回答