Je cherche à définir une condition uniquement pour une action unique dans le contrôleur. Je ne souhaite donc pas modifier mon modèle search
.
Mon code ressemble à ceci:
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,
]);
}
La rangée indiquée montre ma condition ($searchModel->query()->where('role <> regular');
), elle est assez simple mais je n’ai pas trouvé de solution qui fonctionne en ligne.
Pour référence j'ai essayé ceux-ci:
Ok, je l'ai fait, ça marche comme ça pour moi:
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,
]);
}
Certes, un peu compliqué et le faire dans le modèle serait probablement mieux, mais je veux seulement qu’il l’utilise dans cette action et ait un tas d’autres actions avec le même modèle search
mais avec des conditions différentes.
Vous pouvez le faire de cette façon dans le contrôleur
$searchModel = new ModelSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->andWhere(['lang'=>'ENG']);
Vous pouvez essayer de cette façon
$searchModel = new EmployeeSearch();
$searchModel->role = 'regular';
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
Dans le modèle de recherche:
$query->andFilterWhere(['<>', 'role', $this->role]);
La seconde manière passe le second paramètre comme:
$dataProvider = $searchModel->search(Yii::$app->request->queryParams, $role = 'regular');
Dans le modèle de recherche
if($role == 'regular') {
$query->andWhere(['<>', 'role', $this->role]);
}
Une autre façon de passer un autre paramètre comme un problème de temps de filtrage:
$dataProvider = $searchModel->search(Yii::$app->request->queryParams+['EmployeeSearch' => ['<>', 'role' =>'regular']]);
Vous pouvez essayer ceci:
SearchModel:
$searchModel = new EmployeeSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$query->andFilterWhere(['<>', 'role'=>'regular']);
return $this->render('view_role', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
Veuillez également visiter ce lien: http://www.yiiframework.com/doc-2.0/guide-output-data-providers.html
Essayez comme ça en utilisant plusieurs paramètres -
$searchModel = new YourSearchModel();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->where('field1 = :field1 AND field2 = :field2', [':field1' => 1, ':field2' => 'A']);
Essayez cette solution
$searchModel = new ModelnameSearch
(
[ 'Attribute' => 1,
'SecondAttribte' => '1',
]
);