Set a where condition for dataprovider in specific controller method

Spurious picture Spurious · Jul 31, 2015 · Viewed 23.3k times · Source

I am looking to set a condition only for a single action in the controller, so I don't want to change my search model.

My code looks like this:

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

The commmented row shows my condition ($searchModel->query()->where('role <> regular');), it's pretty straightforward but I have not found a solution that works online.

For reference I tried those:

Answer

Spurious picture Spurious · Jul 31, 2015

Ok, I got it done, it works this way for me:

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

Certainly a bit complicated and doing it in the model would probably be better, but I only want it to use it in this action and have a bunch of other actions with the same searchmodel but different conditions.