我希望仅为控制器中的单个操作设置条件,因此我不想更改我的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');
),它非常简单,但我找不到可在线使用的解决方案。
作为参考,我尝试了那些:
答案 0 :(得分:12)
好的,我完成了它,它以这种方式为我工作:
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
模型但具有不同条件的一堆其他操作。 / p>
答案 1 :(得分:7)
你可以在Controller
中这样做$searchModel = new ModelSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->andWhere(['lang'=>'ENG']);
答案 2 :(得分:2)
你可以试试这种方式
$searchModel = new EmployeeSearch();
$searchModel->role = 'regular';
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
在搜索模型中:
$query->andFilterWhere(['<>', 'role', $this->role]);
第二种方式传递第二个参数,如:
$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']]);
答案 3 :(得分:0)
你可以试试这个:
的 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
答案 4 :(得分:0)
试试这个解决方案
$searchModel = new ModelnameSearch
(
[ 'Attribute' => 1,
'SecondAttribte' => '1',
]
);
答案 5 :(得分:0)
尝试使用multi-params -
$searchModel = new YourSearchModel();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->where('field1 = :field1 AND field2 = :field2', [':field1' => 1, ':field2' => 'A']);