2013-03-18 36 views
0

我嘗試下面的查詢,併產生一個數組,如何獲取SQL查詢結果的CGridView?

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

但是,當我試圖讓在CGridview,進出口查詢得到錯誤的值,

Property "CDbCommand.0" is not defined. 

這裏爲GridView控件的代碼,

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

回答

-2

使用「關鍵字段」,以避免錯誤,未定義指數'id' and 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'。當嘗試你的步驟 – sher 2013-03-18 08:28:56

+0

我可以使用CActiveDataProvider動態查詢,由用戶? – sher 2013-03-18 08:30:05

+0

如果我們有非常複雜的查詢,我們只使用sql數據提供者。我們應該嘗試使用CActive DataProvider。它節省了時間和精力。 – 2013-03-18 08:41:02

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個模型生成報告。我使用的表單沒有模型,即report.php,從表單輸入,我生成一個查詢,所以現在如何使用它?我可以在任何一個模型中使用上面的代碼嗎? – sher 2013-03-18 09:08:02

+0

您可以在任何模型中分配函數,並在您的控制器渲染函數中傳遞該模型。通過此功能,您可以在Cgridview數據提供者中調用該模型搜索函數。 – 2013-03-18 09:11:00

+0

你可以有這樣的任何示例代碼? – sher 2013-03-18 09:14:05

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 = 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,因爲我想通過動態查詢gridview。 – sher 2013-03-20 04:17:28