2013-12-16 7 views
-1

컨트롤러에 CGridView에사용자 정의 쿼리는 YII

$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를 사용하는 것이 좋습니다. 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