我们可以在yii2 gridview中自定义搜索

时间:2017-10-10 06:23:48

标签: gridview yii2

我正在使用yii2 gridview应用程序,它默认提供搜索选项。如果条目“包含”给定值,则griview搜索会给出结果。如果我们在搜索框中键入“ab”,那么它将给出包含“ab”的结果。

<?php 
          $query->andFilterWhere(['like', 'name', $this->name])
        ->andFilterWhere(['like', 'alias', $this->alias])
        ->andFilterWhere(['like', 'company_mail', $this->company_mail])
        ?>

我想要的是搜索以“ab”开头? 怎么做?

1 个答案:

答案 0 :(得分:1)

dataProvider的gridview显示数据
正如你可以在一个典型的gridview相关动作中看到的,比如actionIndex

你可以看到dataProvider使用方法search()

使用搜索模型作为YourmodelSearc()的新类构建
public function actionIndex()
{

    $searchModel = new YourModelSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

和一个搜索函数小心地包含find()和AndFliter()函数,用于构建对于dataProvider

的查询
public function search($params)
  {
      $query = YourModel::find();

      $dataProvider = new ActiveDataProvider([
          'query' => $query,
      ]);

      if (!($this->load($params) && $this->validate())) {
          return $dataProvider;
      }

      $query->andFilterWhere([
          'your_numeric_col1' => $this->your_col1,
          'your_numeric_col2' => $this->your_col2,
          ......
          'id' => $this->id,
      ]);

      $query->andFilterWhere(['like', 'your_string_colx', $this->your_string_colx])
          ->andFilterWhere(['like', 'your_string_coly', $this->your_string_coly])
         .......
          ->andFilterWhere(['like', 'your_string_coln', $this->your_string_coln]);

      return $dataProvider;
  }

扩展,重新定义或操纵search()或构建新的customSeach() 您应用多个过滤器或查询查询过滤器的默认行为

对于like运算符,如果yii2过滤默认值不是您所需要的,您可以尝试使用字符串格式的andWhere。

事实上,在没有允许使用文字条件的情况下,你可以添加一个简单的,并且可以为null值进行测试 查询构建代码的底部

$query->andFilterWhere(['like', 'your_string_colx', $this->your_string_colx])

     .......
      ->andFilterWhere(['like', 'your_string_coln', $this->your_string_coln]);

if (isset($this->your_string_coly)){
    $query->andWhere('your_string_coly like concat("%", :param1)',
        [':param1'=> $this->your_string_coly])

}

return $query;