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

Yii2在同一控制器的新索引页上显示活动()记录,yii2,Yii2,我甚至不知道如何定义我的问题,因此我无法真正寻找答案,因此如果您能为我指出正确的方向,我将不胜感激。 我有一个模型、一个视图和一个控制器。通常,如果我调用索引,我会获取所有记录。那很好。现在我只想从数据库中查询active()记录。因此,我希望在新的索引页上只看到活动记录。我必须在哪里定义它?当然,函数本身已经在ModelQuery中定义。但在控制器中,我必须创建一个新函数,以便能够调用新视图 public function actionIndex2() { $searchModel =

我甚至不知道如何定义我的问题,因此我无法真正寻找答案,因此如果您能为我指出正确的方向,我将不胜感激。 我有一个模型、一个视图和一个控制器。通常,如果我调用索引,我会获取所有记录。那很好。现在我只想从数据库中查询active()记录。因此,我希望在新的索引页上只看到活动记录。我必须在哪里定义它?当然,函数本身已经在ModelQuery中定义。但在控制器中,我必须创建一个新函数,以便能够调用新视图

public function actionIndex2() {
    $searchModel = new ModelSearch;
    $dataProvider = $searchModel->search($_GET);
    ...
    return $this->render('index2', [
                'dataProvider' => $dataProvider,
                'searchModel' => $searchModel,
    ]);
}

我尝试将
->active()
添加到所有可能的位置,但没有成功。我不能搞砸ModelSearch,因为那样我也会破坏基本的索引站点功能。很明显,我可以在这样做时使用它:
Order::find()->active()
,但现在情况并非如此。我是否也必须创建一个新的ModelSearch?我希望没有必要。非常感谢

假设您希望按$id进行筛选(例如在url/index2?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,
      ]);
  }

因此,您必须正式地将ActiveQueries添加到ModelSearch的搜索方法中

public function search($params) {
    $query = Model::find()->activeQuery1()->activeQuery2();

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
        ...


这意味着您必须在ModelSearch中创建一个新的ModelSearch或一个新的搜索方法,其数量是您希望使用的ActiveQueries组合的数倍。

您的意思是您需要一个类似视图表单/actionView的页面,但需要一个gridview而不是viewDetail???或者其他什么我需要一个新的索引页。似乎正在工作:
$dataProvider->query->active()非常感谢!问题是,这种方式网格中的基本过滤功能无法正常工作
public function search($params) {
    $query = Model::find();

    $dataProvider = new ActiveDataProvider([
        'query' => $query->activeQuery1()->activeQuery2(),
        ...