Php 如何获取SQL查询结果的CGridView?

Php 如何获取SQL查询结果的CGridView?,php,mysql,yii,cgridview,Php,Mysql,Yii,Cgridview,我尝试下面的查询,它会生成一个数组 $user = Yii::app()->reg->createCommand() ->select('studentID') ->from('Students') ->queryAll(); 但是,当我试图在CGridview中获取查询值时,我得到了错误 Property "CDbCommand.0" is not defined. 这是gridview的代码 $this->widget('zii.widgets.gri

我尝试下面的查询,它会生成一个数组

$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),
));
看看,第一个参数应该是一个包含SQL查询的字符串,或者是一个
CdbCommand
,但是$user是一个
数组

你应该试试:

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

PS:您是否尝试使用?

编辑: 在$model中定义数据:

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(),
请记住,数据提供程序属性仅取决于您的查询。请使用别名并在gridview列中调用。

这是代码

<?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, 
)); ?>

这是控制器的内容。将此数据提供程序传递给模板

$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',
        ),
   ),
));

这可能会帮助您:)

使用“keyfield”避免出现错误,即未定义索引“id” and keyfield=所选列的名称

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

thnx alot soju,实际上我正试图通过动态查询使用cgridview,这就是为什么我尝试使用CSqlDataProvider。但我仍然有一个错误,未定义索引'id'。当尝试我们的步骤扫描时,我使用CActiveDataProvider进行动态查询,按用户??只有当我们有非常复杂的查询时,我们才使用sql数据提供程序。我们应该尝试使用CActiveDataProvider。它节省了时间和精力。@SudhanshuSaxena,在我的例子中如何使用CSqlDataProvider。我有一个动态查询,我想在CGridview中列出结果。。你的回复在gridview中,现在我根据@SudhanshuSaxena的帖子做了一些修改。现在我犯了致命的错误。“CPagination.php中不支持的操作数类型”@thnks谢谢你的帮助,我也没有什么疑问,我有5个模型,现在我正试图通过sql查询生成一个报告,其中包括所有5个模型。我使用一个没有模型的表单,即report.php,从表单输入生成一个查询,那么现在如何使用它呢??我可以在任何1个模型中使用上述代码吗?您可以在任何模型中分配函数,并在控制器渲染函数中传递该模型。通过此功能,您可以在Cgridview数据提供程序中调用该模型搜索函数。我得到以下错误??致命错误:C:\xampp\yiiroot\framework\web\CPagination.php中不支持的操作数类型在第151行这里执行两个相同的查询,一秒钟有限制,这绝对不是优化的解决方案。在此sqldataprovider中,如何为复选框添加列?感谢您的回复rohit,但我想使用CSqlDataProvider,coz,我想要动态查询的gridview。
$dataProvider = new CSqlDataProvider($query, array(
'totalItemCount'=>(int) $count1,
'keyField' => 'studentID',
'pagination'=>array( 'pageSize'=>30, ),));