2013-12-16 7 views
-1

контроллер,Индивидуальный запрос для отображения в CGridView в YII

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

View,

$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