【问题标题】:Yii2 show active() records on a new index page of the same controllerYii2 在同一控制器的新索引页面上显示 active() 记录
【发布时间】:2017-03-20 15:27:05
【问题描述】:

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

【问题讨论】:

  • 你的意思是你需要一个像 view form/actionView 这样的页面,但是用 gridview 而不是 viewDetail ???或其他的东西
  • 我需要一个新的 index 页面。

标签: yii2


【解决方案1】:

假设您想通过 $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,
      ]);
  }

【讨论】:

  • 似乎工作正常:$dataProvider->query->active(); 非常感谢!
  • 问题是,这种方式网格中的基本过滤不起作用
【解决方案2】:

所以正式地你必须将你的 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 组合的次数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多