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']);