2013-12-16 28 views
-1

控制器显示,定制查询到CGridView在警予

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

但后来我得到这个错误

Fatal error: Call to a member function getData() on a non-object in D:\wamp\www\yii\framework\zii\widgets\CBaseListView.php on line 111

我很困惑,不知道怎么回事。

回答

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