コントローラー内の単一のアクションに対してのみ条件を設定したいので、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');
)を示しています。これはかなり単純ですが、オンラインで機能する解決策を見つけていません。
参考までに私はそれらを試しました:
OK、私はそれを成し遂げました、それは私にとってこのように機能します:
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
modelであるが異なる条件を持つ他のアクションの束があることだけを望みます。
コントローラでこのようにすることができます
$searchModel = new ModelSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->andWhere(['lang'=>'ENG']);
あなたはこの方法を試すことができます
$searchModel = new EmployeeSearch();
$searchModel->role = 'regular';
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
検索モデル:
$query->andFilterWhere(['<>', 'role', $this->role]);
2番目の方法は次のように2番目のパラメータを渡します:
$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']]);
あなたはこれを試すことができます:
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
マルチパラメータを使用してこのようにしてみてください-
$searchModel = new YourSearchModel();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->where('field1 = :field1 AND field2 = :field2', [':field1' => 1, ':field2' => 'A']);
この解決策を試してください
$searchModel = new ModelnameSearch
(
[ 'Attribute' => 1,
'SecondAttribte' => '1',
]
);