Search 在特定控制器方法中为数据提供程序设置where条件
我希望只为控制器中的单个操作设置一个条件,因此我不想更改我的Search 在特定控制器方法中为数据提供程序设置where条件,search,model,yii2,conditional-statements,dataprovider,Search,Model,Yii2,Conditional Statements,Dataprovider,我希望只为控制器中的单个操作设置一个条件,因此我不想更改我的搜索模型 我的代码如下所示: public function actionRoles() { $searchModel = new EmployeeSearch(); //$searchModel->query()->where('role <> regular'); $dataProvider = $searchModel->search(Yii::
搜索
模型
我的代码如下所示:
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,
]);
}
public function actionRoles()
{
$searchModel=新员工搜索();
//$searchModel->query()->where('role regular');
$dataProvider=$searchModel->search(Yii::$app->request->queryParams);
返回$this->render('view\u role'[
“searchModel”=>$searchModel,
“dataProvider”=>$dataProvider,
]);
}
带逗号的行显示了我的情况($searchModel->query()->where('role regular');
),它非常简单,但我还没有找到一个在线工作的解决方案
作为参考,我试过:
$searchModel = new EmployeeSearch();
$searchModel->role = 'regular';
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
在搜索模型中:
$query->andFilterWhere(['<>', 'role', $this->role]);
搜索模型
if($role == 'regular') {
$query->andWhere(['<>', 'role', $this->role]);
}
if($role=='regular'){
$query->andWhere(['''role',$this->role]);
}
另一种方法是传递其他参数,如但过滤时间有问题:
$dataProvider = $searchModel->search(Yii::$app->request->queryParams+['EmployeeSearch' => ['<>', 'role' =>'regular']]);
$dataProvider=$searchModel->search(Yii::$app->request->queryParams+['EmployeeSearch'=>['','role'=>'regular']]);
您可以试试这个:搜索模型:
$searchModel = new EmployeeSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$query->andFilterWhere(['<>', 'role'=>'regular']);
return $this->render('view_role', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
$searchModel=新员工搜索();
$dataProvider=$searchModel->search(Yii::$app->request->queryParams);
$query->andFilterWhere([''role'=>'regular']);
返回$this->render('view\u role'[
“searchModel”=>$searchModel,
“dataProvider”=>$dataProvider,
]);
也请访问此链接:好的,我已经完成了,它以这种方式为我工作:
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,
]);
}
public function actionRoles()
{
$searchModel=新员工搜索();
$dataProvider=$searchModel->search(Yii::$app->request->queryParams);
$dataProvider->sort=['defaultOrder'=>['role'=>sort\u ASC,'fullname'=>sort\u ASC]];
$dataProvider->query->where('employee.role'regular\'');
返回$this->render('view\u role'[
“searchModel”=>$searchModel,
“dataProvider”=>$dataProvider,
]);
}
当然有点复杂,在模型中执行可能会更好,但我只希望在这个操作中使用它,并有一系列其他操作,具有相同的搜索模型,但条件不同。尝试此解决方案
$searchModel = new ModelnameSearch
(
[ 'Attribute' => 1,
'SecondAttribte' => '1',
]
);
您可以在控制器中这样做
$searchModel = new ModelSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->andWhere(['lang'=>'ENG']);
使用多参数尝试如下操作-
$searchModel = new YourSearchModel();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->where('field1 = :field1 AND field2 = :field2', [':field1' => 1, ':field2' => 'A']);
这将返回:PHP Notice–yii\base\ErrorException未定义变量:query
还包括“query”=>return部分中的$query它不起作用,因为$query不是一个定义的模型。我只是到目前为止(必须去吃午饭,稍后再试)测试了您的上一个,返回每个具有角色常规的条目。我不想修改模型,因为我在很多地方使用它,而这只是一个视图,所以对模型的任何更改都很烦人。
$searchModel = new YourSearchModel();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->where('field1 = :field1 AND field2 = :field2', [':field1' => 1, ':field2' => 'A']);