2013-09-12 3 views
0

Каков формат массива для отображения данных в CGridView.Yii: Формат dataProvider в 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', 
    ), 
)); ?> 

Что неправильно в приведенном ниже формате массива.

Array ([0] => Array ([расширение] => 2000 [date_created] => 2013-07-24 21: 15: 09,993303) [1] => Array ([расширение] => 2001 [date_created] => 2013-07-24 21: 23: 07.94538) [2] => Array ( [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

ответ

0

Свойство CGridView::dataProvider должен быть установлен на экземпляр IDataProvider, вы не можете напрямую установить его в массив и ожидать, что она работает.

Непосредственным исправление было бы создать CArrayDataProvider и использовать это:

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

Тем не менее, получение результирующего набора с сырым SQL, как это и кормление его немой CArrayDataProvider не является «Yii путь» делать что-то и намекает, что вы идете неправильно. Неясно, что вы делаете в точности, но вместо этого используйте вместо этого CActiveDataProvider или CSqlDataProvider.

+0

Привет, Спасибо за ответ, теперь я usnig как этот «DataProvider» => новый CArrayDataProvider ($ модель -> ExtensionList()), но я получаю ошибку как Undefined index: id в /var/www/Yii/yii-1.1.13.e9e4a0/framework/web/CArrayDataProvider.php(108) – ungalnanban

+0

вам нужно указать id для CArrayDataProvider для уникальной идентификации каждой записи. – Neophile

+0

привет, я обновил свой вопрос – ungalnanban

0

have a look at CArrayDataProvider documentation выбрать идентификатор и использовать его в качестве уникального идентификатора в CArrayDataProvider

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

+0

привет, я обновил свой вопрос – ungalnanban

Смежные вопросы