2015-06-08 45 views
0

我试图表明使用的GridView从视图数据库中的数据,但我有问题Yii2:不能显示的数据中的Widget的GridView

错误信息

未知方法 - 警予\基地\ UnknownMethodException 调用未知的方法:警予\ DB \ ActiveQuery :: getCount将()

我控制器

public function actionIndex() 
{ 
    $sql = "SELECT presensi.presensi_tanggal 'tanggal', sum(if(hadir.keteranganhadir_id='1',1,0)) 'hadir', sum(if(hadir.keteranganhadir_id='2',1,0)) 'tidak_hadir', count(*) 'total' FROM hadir, keteranganhadir, presensi where hadir.keteranganhadir_id = keteranganhadir.keteranganhadir_id and hadir.presensi_id = presensi.presensi_id group by presensi.presensi_tanggal"; 

    $model = Hadir::findBySql($sql)->all(); 

    return $this->render('index', [ 
     'hadir' => $model, 
    ]); 
} 

我看来

<?= GridView::widget([ 
     'dataProvider' => $hadir, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 

      'tanggal', 
      'hadir', 
      'tidak_hadir', 
      'total', 

      ['class' => 'yii\grid\ActionColumn'], 
     ], 
    ]); ?> 

我怎样才能解决这个问题?

回答

0

的GridView查找数据提供程序,而不是阵列的ActiveRecord模型已发出:

http://www.yiiframework.com/doc-2.0/yii-data-sqldataprovider.html

在控制器/的actionIndex

$count = Yii::$app->db->createCommand(' 
    SELECT COUNT(*) FROM user WHERE status=:status 
', [':status' => 1])->queryScalar(); 

$dataProvider = new SqlDataProvider([ 
    'sql' => 'SELECT * FROM user WHERE status=:status', 
    'params' => [':status' => 1], 
    'totalCount' => $count, 
    'sort' => [ 
     'attributes' => [ 
      'age', 
      'name' => [ 
       'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC], 
       'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC], 
       'default' => SORT_DESC, 
       'label' => 'Name', 
      ], 
     ], 
    ], 
    'pagination' => [ 
     'pageSize' => 20, 
    ], 
]); 
return $this->render('index', [ 
    'hadir' => $dataProvider, 
]); 
+0

我该如何实现这个到我的sql? – ariyandi

0

你可以试试这个:
在Controller.php这样文件:

public function actionIndex() 
    { 
     $searchModel = new InvoiceSearch(); 
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

     return $this->render('index', [ 
      'searchModel' => $searchModel, 
      'dataProvider' => $dataProvider, 
     ]); 
    } 

你的观点文件似乎是真的。只需在控制器文件中添加上面的代码。