【问题标题】:Yii2 : Cannot Show Data in Widget GridViewYii2:无法在小部件 GridView 中显示数据
【发布时间】:2015-06-08 02:01:39
【问题描述】:

我尝试使用gridview在视图中显示数据库中的数据,但我遇到了问题

错误信息

未知方法 – yii\base\UnknownMethodException 调用未知方法:yii\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'],
        ],
    ]); ?>

我该如何解决这个问题?

【问题讨论】:

    标签: mysql gridview frameworks yii2


    【解决方案1】:

    Gridview 查找数据提供者,而不是您发送的活动记录模型数组:

    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,
    ]);
    

    【讨论】:

    • 如何在我的 sql 中实现这个?
    【解决方案2】:

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

    public function actionIndex()
        {
            $searchModel = new InvoiceSearch();
            $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    
            return $this->render('index', [
                'searchModel' => $searchModel,
                'dataProvider' => $dataProvider,
            ]);
        }
    

    您的视图文件似乎是真实的。只需在控制器文件中添加上述代码即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      相关资源
      最近更新 更多