首页 > 解决方案 > 将搜索添加到自定义查询 Yii2

问题描述

我构建了一个自定义查询来对一些字段进行计数和求和,然后使用 gridview 来显示数据。

这是我的查询:

$query2 = (new \yii\db\Query())
    ->select([
        'date', 
        'sum( IF(status = "Passed", 1, 0) ) AS passed', 
        'sum( IF(status = "Failed", 1, 0) ) AS failed', 
        'sum( IF(status = "On Hold", 1, 0) ) AS onhold', 
        'sum( IF(status <> "NULL", 1, 0) ) AS total'
    ])
    ->from('qa3d')->where(['week'=>$week])
    ->groupBy('date');

    $dataProvider2 = new ActiveDataProvider([
        'query' => $query2,

    ]);

还有我的网格视图:

<?= GridView::widget([
        'dataProvider' => $dataProvider2,
        // 'filterModel' => $searchModel,
        'headerRowOptions' => ['class' => 'kartik-sheet-style'],
        'filterRowOptions' => ['class' => 'kartik-sheet-style'],
        'panel' => [
            'type' => GridView::TYPE_PRIMARY,
            'heading' => 'Status Report by Analyst - Week to Date',
            ],
        'toolbar' =>  [
            '{toggleData}',
        ],
        'pjax' => true,
        'columns' => [

            'date',
            'passed',
            'failed',
            [
            'attribute' => 'onhold', 
            'label' => "On Hold",
            ],   
            'total',
        ],
    ]); ?>

我注释掉了,filterModel因为它不起作用。如何像 Gii CRUD 生成器那样为这个自定义查询构建搜索?

请帮我解决一下这个。

谢谢!

标签: yii2yii2-basic-app

解决方案


是的,你有。您必须创建指向该页面操作的搜索表单,然后您必须决定如何转发参数。您可以将其放入搜索模型或获取它并传递给您的查询。这取决于您的查询在哪里。

$searchModel = new SomeSearchModel();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);

或者像这样然后访问数组元素。

$post = Yii::$app->request->queryParams;

在你的情况下,我想你会搜索$week = $post['week'];


推荐阅读