【问题标题】:How to get CGridView for the SQL Query result?如何获取 SQL 查询结果的 CGridView?
【发布时间】:2013-03-18 07:04:45
【问题描述】:

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

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

【问题讨论】:

    标签: php mysql yii cgridview


    【解决方案1】:

    编辑: 在您的 $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(),
    

    请记住,您的 dataprovider 属性仅取决于您的查询。使用别名并在 gridview 列中调用。

    【讨论】:

    • @thnks 为您提供帮助,我还有一些疑问,我有 5 个模型,现在我尝试通过 sql 查询生成报告,其中包括所有 5 个模型。我使用没有模型的表单,即report.php,从表单输入,我生成一个查询,那么现在如何使用它?我可以在任何一个模型中使用上面的代码吗??
    • 您可以在任何模型中分配该函数并将该模型传递给您的控制器渲染函数。通过此功能,您可以在 Cgridview 数据提供程序中调用该模型搜索函数。
    • 我收到以下错误??致命错误:第 151 行的 C:\xampp\yiiroot\framework\web\CPagination.php 中不支持的操作数类型
    • 在这里你执行 2 个相同的查询,一整秒有限制,绝对不是优化的解决方案。
    • 在这个sqldataprovider中,如何为复选框添加一列?
    【解决方案2】:

    看看CSqlDataProvider constructor,第一个参数应该是一个包含SQL查询的字符串,或者一个CdbCommand,但是$user是一个array

    你应该试试:

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

    还有:

    'dataProvider'=> new CSqlDataProvider($command)
    

    PS:你试过用CActiveDataProvider吗?

    【讨论】:

    • thnx 很多烧酒,实际上我正在尝试通过动态查询使用 cgridview,这就是为什么,我尝试使用 CSqlDataProvider。但我仍然有一个错误,未定义的索引'id'。尝试您的步骤时
    • 我可以按用户使用 CActiveDataProvider 进行动态查询吗??
    • 如果我们有非常复杂的查询,我们只使用sql数据提供者。我们应该尝试使用CActive DataProvider。它可以节省时间和精力。
    • @SudhanshuSaxena,在我的情况下如何使用 CSqlDataProvider。我有一个动态查询,我想在 CGridview 中列出结果。谢谢你的回复
    • 那是在gridview中,现在我改变了一些东西,根据@SudhanshuSaxena的帖子。现在我得到了致命的错误。 "CPagination.php 中不支持的操作数类型"
    【解决方案3】:

    这是代码,

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

    【讨论】:

      【解决方案4】:

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

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

      希望对你有帮助:)

      【讨论】:

      • 感谢您的回复 rohit,但我想使用 CSqlDataProvider,因为我想要动态查询的 gridview。
      【解决方案5】:

      使用'keyfield'来避免错误,未定义索引'id' 和 keyfield = 所选列的名称

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-22
        • 1970-01-01
        • 1970-01-01
        • 2021-10-12
        • 2020-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多