在特定控制器方法中为dataprovider设置where条件

时间:2015-07-31 08:40:09

标签: search model yii2 conditional-statements dataprovider

我希望仅为控制器中的单个操作设置条件,因此我不想更改我的search模型。

我的代码如下所示:

public function actionRoles()
    {
        $searchModel = new EmployeeSearch();
        //$searchModel->query()->where('role <> regular');
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

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

通知行显示我的条件($searchModel->query()->where('role <> regular');),它非常简单,但我找不到可在线使用的解决方案。

作为参考,我尝试了那些:

6 个答案:

答案 0 :(得分:12)

好的,我完成了它,它以这种方式为我工作:

public function actionRoles()
{
    $searchModel = new EmployeeSearch();

    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    $dataProvider->sort = ['defaultOrder' => ['role'=>SORT_ASC, 'fullname'=>SORT_ASC]];
    $dataProvider->query->where('employee.role <> \'regular\'');

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

当然有点复杂并且在模型中执行它可能会更好,但我只希望它在此操作中使用它并且具有相同search模型但具有不同条件的一堆其他操作。 / p>

答案 1 :(得分:7)

你可以在Controller

中这样做
$searchModel = new ModelSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->andWhere(['lang'=>'ENG']);

答案 2 :(得分:2)

你可以试试这种方式

$searchModel = new EmployeeSearch();
$searchModel->role = 'regular';
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);

在搜索模型中:

$query->andFilterWhere(['<>', 'role', $this->role]);

第二种方式传递第二个参数,如:

$dataProvider = $searchModel->search(Yii::$app->request->queryParams, $role = 'regular');

在搜索模型中

if($role == 'regular') {
    $query->andWhere(['<>', 'role', $this->role]);
}

另一种方式传递其他参数,例如过滤时间中的问题:

$dataProvider = $searchModel->search(Yii::$app->request->queryParams+['EmployeeSearch' => ['<>', 'role' =>'regular']]);

答案 3 :(得分:0)

你可以试试这个:
SearchModel:

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


    $query->andFilterWhere(['<>', 'role'=>'regular']);
return $this->render('view_role', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);

请访问此链接:http://www.yiiframework.com/doc-2.0/guide-output-data-providers.html

答案 4 :(得分:0)

试试这个解决方案

$searchModel = new ModelnameSearch
           (
              [ 'Attribute' => 1,
               'SecondAttribte' => '1',
              ]
           );

答案 5 :(得分:0)

尝试使用multi-params -

$searchModel = new YourSearchModel();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->where('field1 = :field1 AND field2 = :field2', [':field1' => 1, ':field2' => 'A']);