我甚至不知道如何定义我的问题,所以我无法真正寻找答案,所以如果你能指出我正确的方向,我们将不胜感激。 我有一个模型视图和控制器。通常,如果我正在调用索引,我将获得所有记录。这很好。现在我想从DB只查询 active()记录。所以我想在新的索引页面上只看到活动记录。我在哪里定义这个?当然,函数本身已经在ModelQuery中定义。但是在Controller中,我必须创建一个新函数,以便能够调用新视图。
public function actionIndex2() {
$searchModel = new ModelSearch;
$dataProvider = $searchModel->search($_GET);
...
return $this->render('index2', [
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
]);
}
我曾尝试将->active()
添加到此处所有可能的位置,但没有运气。我不能搞乱ModelSearch,因为那时我也会毁掉基本的索引网站功能。很明显我可以在我这样做时使用它:Order::find()->active()
,但现在情况并非如此。我是否还必须创建一个新的ModelSearch?我希望没有必要。非常感谢!
答案 0 :(得分:1)
假设您希望按$ id过滤,例如在您的网址/索引2中?id = 10)您可以尝试这种方式
public function actionIndex2($id) {
$searchModel = new ModelSearch;
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->
andWhere(['id' => $id]);
...
return $this->render('index2', [
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
]);
}
答案 1 :(得分:0)
因此,您必须将ActiveQueries添加到ModelSearch的搜索方法中。
public function search($params) {
$query = Model::find()->activeQuery1()->activeQuery2();
$dataProvider = new ActiveDataProvider([
'query' => $query,
...
或
public function search($params) {
$query = Model::find();
$dataProvider = new ActiveDataProvider([
'query' => $query->activeQuery1()->activeQuery2(),
...
这意味着您必须在ModelSearch中创建一个新的ModelSearch或一个新的搜索方法,这是您希望使用的ActiveQueries组合的多倍。