Yii2在同一控制器的新索引页面上显示active()记录

时间:2017-03-20 15:27:06

标签: yii2

我甚至不知道如何定义我的问题,所以我无法真正寻找答案,所以如果你能指出我正确的方向,我们将不胜感激。 我有一个模型视图和控制器。通常,如果我正在调用索引,我将获得所有记录。这很好。现在我想从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?我希望没有必要。非常感谢!

2 个答案:

答案 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组合的多倍。