自定义查询以在yii中的CGridView中显示

时间:2013-12-16 06:42:41

标签: yii-extensions yii yii-components yii-events

控制器,

    $model=Product::model()->display_products_statistics();
$this->render('admin',array(
    'model'=>$model,
));

查看,

 $this->widget('zii.widgets.grid.CGridView', array(
'id' => 'product-grid',
'dataProvider' => $model->display_products_statistics(),
'filter'=> $model,
'columns'=> array(
    'member_count',
    'seller_count',
    'visitor_count',
    'lowest price',
    'desc',
    'price',
    'createdate',
    'updatedate',
    'opid',
    'pimg',
    array(
        'class'=>'CButtonColumn',
    ),
),
     ));

模型,

$sql="select member_count,seller_count,
visitor_count from fc_product fp
group by  member_count,visitor_count,seller_count
order by member_count desc";
$connection=Yii::app()->db;
$command=$connection->createCommand($sql);
$products_statistics=$command->queryAll();
$dataprovider=new CArrayDataProvider($products_statistics,
    array('pagination'=>false));
return $dataprovider->getData();

但后来我收到了这个错误

  

致命错误:在第111行的D:\ wamp \ www \ yii \ framework \ zii \ widgets \ CBaseListView.php中的非对象上调用成员函数getData()

我很困惑,不知道出了什么问题。

1 个答案:

答案 0 :(得分:0)

您的问题是您没有以正确的方式使用CDataProvider。 CGridView需要显示CDataProvider的实例,但您已使用CDataProvider-> getData()代替。我还建议使用CSqlDataProvider,它是专门用于自定义sql查询的。在你的模型中尝试这个;

$count = Yii::app()->db->createCommand('SELECT COUNT(*) FROM fc_product')->queryScalar();
$sql="select member_count,seller_count,
visitor_count from fc_product fp
group by  member_count,visitor_count,seller_count
order by member_count desc";
return new CSqlDataProvider($sql, array(
    'totalItemCount' => $count,
    'sort' => array(
        'attributes' => array(
             'member_count', 'visitor_count', 'seller_count',
        ),
    ),
    'pagination' => false