2017-10-10 117 views
1

我正在使用yii2 gridview应用程序,默认情况下会提供搜索选项。如果条目“包含”给定的值,griview搜索会给出结果。也就是说,如果我们在搜索框中键入“ab”,那么它会给出包含“ab”的结果。我们可以在yii2 gridview中自定义搜索吗

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

我想要搜索以“ab”开头吗? 如何做到这一点?

回答

1

为数据提供程序
GridView中显示的数据,你可以在喜欢的actionIndex

一个tipical gridview的相关行动见

你可以看到dataProvider是建立USIG搜索模式作为YourmodelSearc(新类)与方法搜索()

public function actionIndex() 
{ 

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

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

和tipically搜索功能contail查找()和AndFliter()函数构建dinamically查询的数据提供程序

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; 
    } 

而延伸的,重新定义或操纵搜索()或建立一个新的customSeach() 应用多个过滤器或chainging查询过滤

like运营商的默认行为时yii2过滤默认是不是你需要你可以尝试在字符串格式中使用andWhere。

做的事实,andFilterWhere don'k允许使用文字conditition的,你可以添加一个简单的andWhere测试空值 的查询建筑规范底部

$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; 
+0

我应该怎么做才能让搜索上开始信的基础?意味着如果我在搜索文本框中输入“ab”它会给出以“ab”开头的条目 – Goli

+0

,以“ab”开头的字符串(mysql中的别名,比如'ab%'),而fFilterWhere的正常行为应该足够 - 如果你想匹配二进制“ab”,你可能需要=而不是像 – scaisEdge

+0

实际上它采用的是字母“%ab%”而不是“ab%”。和我只是想它给字符串开始在搜索文本框中的alphabates – Goli

相关问题