2013-03-18 3 views
0

Я пытаюсь следующий запрос, и который создает массив,Как получить CGridView для результата SQL-запроса?

$user = Yii::app()->reg->createCommand() 
->select('studentID') 
->from('Students') 
->queryAll(); 

Однако, когда я пытаюсь получить значение запроса в CGridview, Im получая ошибку,

Property "CDbCommand.0" is not defined. 

здесь код для GridView,

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'students-grid', 
'dataProvider'=> new CSqlDataProvider($user), 
)); 

ответ

-2

Используйте 'KeyField', чтобы избежать ошибки, Undefined индекс 'идентификатор' и KeyField = имя выбранного столбца

$dataProvider = new CSqlDataProvider($query, array(
'totalItemCount'=>(int) $count1, 
'keyField' => 'studentID', 
'pagination'=>array('pageSize'=>30,),)); 
0

Взгляните на CSqlDataProvider constructor, первые пары должны быть строкой, содержащая запрос SQL, или CdbCommand, но $ user - array.

Вы должны попробовать:

$command = Yii::app()->reg->createCommand() 
    ->select('studentID') 
    ->from('Students'); 

И:

'dataProvider'=> new CSqlDataProvider($command) 

PS: вы пытались использовать CActiveDataProvider?

+0

Thnx много Soju, на самом деле им пытаются использовать cgridview, динамическими запросами, вот почему я пытаюсь использовать CSqlDataProvider. но все же у меня есть ошибка, неопределенный индекс 'id'. при попытке выполнить шаги ur – sher

+0

могу ли я использовать CActiveDataProvider для динамических запросов, пользователем? – sher

+0

мы используем только поставщик данных sql, если у нас очень сложный запрос. Мы должны попытаться использовать CActive DataProvider. это экономит время и усилия. –

1

Редакция: в вашем $ модели определяют данные:

public function newsearch(){ 
$query = "Your Query"; 
$count=Yii::app()->db->createCommand($query)->queryScalar(); 
$dataProvider = new CSqlDataProvider($query, array(
     'totalItemCount'=>$count)); 
} 

В вашем действии контроллера:

$model = new model or assigned model; 
//Your Logic // 
$this->render('viewname',array('model'=>$model)); 

И в файловом вызове просмотра этой функции:

'dataProvider'=> $model->newsearch(), 

Помните, что атрибуты dataprovider зависят только от вашего запроса. Используйте псевдоним и вызовите столбцы gridview.

+0

@thnks за вашу помощь, у меня еще несколько сомнений, у меня есть 5 моделей, теперь я пытаюсь создать отчет по sql-запросу, который включает в себя все 5 моделей. Я использую форму без модели i.e, report.php, из ввода формы, я генерирую запрос, так что теперь, как его использовать? могу ли я использовать вышеуказанный код в любой из моделей? – sher

+0

вы можете определить функцию в любой модели и передать эту модель в функцию рендеринга контроллера. Благодаря этой функции вы можете вызвать эту функцию поиска модели в вашем Captive dataprovider. –

+0

у вас есть код для этого? – sher

0

Это код,

<?php 
$query = "SELECT student_name FROM smartrea_srkreg.Students"; 
$count=Yii::app()->reg->createCommand($query)->queryAll(); 
$dataProvider = new CSqlDataProvider($query, array(
'totalItemCount'=>$count, 
'pagination'=>array(
'pageSize'=>30, 
), 
)); 
var_dump($dataProvider); 
?> 

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'students-grid', 
'dataProvider'=> $dataProvider, 
)); ?> 
0

Это содержание контроллера. Передайте эту DataProvider шаблону

$dataProvider = new CActiveDataProvider('Students', 
      array(
      'criteria'=>array(      
      'select'=>'t.studentID' 
     ))); 

В файле шаблона вставьте код ниже:

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'subject-grid', 
    'dataProvider'=>$model, 
    'columns'=>array(
     'studetID', 
     array(
      'class'=>'CButtonColumn', 
     ), 
    ), 
)); 

мая это поможет :)

+0

спасибо за ваш ответ rohit, но я хочу сделать с CSqlDataProvider, coz, я хочу gridview динамическими запросами. – sher

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