Ich möchte eine Bedingung nur für eine einzelne Aktion im Controller festlegen, daher möchte ich mein Modell search
nicht ändern.
Mein Code sieht so aus:
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,
]);
}
Die Zeile mit dem Kommentar zeigt meinen Zustand ($searchModel->query()->where('role <> regular');
), es ist ziemlich einfach, aber ich habe keine Lösung gefunden, die online funktioniert.
Als Referenz habe ich die probiert:
Ok, ich habe es geschafft, es funktioniert für mich so:
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,
]);
}
Sicherlich ein bisschen kompliziert und das Ausführen im Modell wäre wahrscheinlich besser, aber ich möchte nur, dass es in dieser Aktion verwendet wird und eine Reihe anderer Aktionen mit demselben search
-Modell, aber unterschiedlichen Bedingungen hat.
Sie können dies auf dem Controller tun
$searchModel = new ModelSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->andWhere(['lang'=>'ENG']);
Sie können diesen Weg versuchen
$searchModel = new EmployeeSearch();
$searchModel->role = 'regular';
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
Im Suchmodell:
$query->andFilterWhere(['<>', 'role', $this->role]);
Zweiter Weg übergeben Sie den zweiten Parameter wie:
$dataProvider = $searchModel->search(Yii::$app->request->queryParams, $role = 'regular');
Im Suchmodell
if($role == 'regular') {
$query->andWhere(['<>', 'role', $this->role]);
}
Eine andere Möglichkeit, andere Parameter wie, aber Problem in der Filterzeit zu übergeben:
$dataProvider = $searchModel->search(Yii::$app->request->queryParams+['EmployeeSearch' => ['<>', 'role' =>'regular']]);
Sie können dies versuchen:
SearchModel:
$searchModel = new EmployeeSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$query->andFilterWhere(['<>', 'role'=>'regular']);
return $this->render('view_role', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
Bitte besuchen Sie auch diesen Link: http://www.yiiframework.com/doc-2.0/guide-output-data-providers.html
Versuchen Sie es mit Multi-Params -
$searchModel = new YourSearchModel();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->where('field1 = :field1 AND field2 = :field2', [':field1' => 1, ':field2' => 'A']);
Versuchen Sie diese Lösung
$searchModel = new ModelnameSearch
(
[ 'Attribute' => 1,
'SecondAttribte' => '1',
]
);