2017-10-10 119 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

相關問題