Reputation: 2005
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:
Upvotes: 12
Views: 25795
Reputation: 3628
Try like this using multi-params -
$searchModel = new YourSearchModel();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->where('field1 = :field1 AND field2 = :field2', [':field1' => 1, ':field2' => 'A']);
Upvotes: 0
Reputation: 522
You can do it this way in the Controller
$searchModel = new ModelSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->andWhere(['lang'=>'ENG']);
Upvotes: 11
Reputation: 484
Try this solution
$searchModel = new ModelnameSearch
(
[ 'Attribute' => 1,
'SecondAttribte' => '1',
]
);
Upvotes: 0
Reputation: 2005
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 search
model but different conditions.
Upvotes: 15
Reputation: 3160
You can try this:
SearchModel:
$searchModel = new EmployeeSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$query->andFilterWhere(['<>', 'role'=>'regular']);
return $this->render('view_role', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
Please also visit this link:http://www.yiiframework.com/doc-2.0/guide-output-data-providers.html
Upvotes: 0
Reputation: 1226
You can try this way
$searchModel = new EmployeeSearch();
$searchModel->role = 'regular';
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
In Search model :
$query->andFilterWhere(['<>', 'role', $this->role]);
Second way pass second parameter like :
$dataProvider = $searchModel->search(Yii::$app->request->queryParams, $role = 'regular');
In search model
if($role == 'regular') {
$query->andWhere(['<>', 'role', $this->role]);
}
Another way pass other parameter like but problem in filter time:
$dataProvider = $searchModel->search(Yii::$app->request->queryParams+['EmployeeSearch' => ['<>', 'role' =>'regular']]);
Upvotes: 4