2017-10-10 2 views
1

anpassen Ich verwende yii2 Gridview-Anwendung, die standardmäßig Suchoption gibt. Die Griview-Suche liefert Ergebnisse, wenn Einträge gegebene Werte "enthalten". Das heißt, wenn wir "ab" in das Suchfeld eingeben, gibt es Ergebnisse, die "ab" enthalten.Können wir die Suche in yii2 gridview

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

was ich will ist Suche nach beginnend mit "ab"? wie geht das?

Antwort

1

ein Gridview-Anzeigedaten für Datenprovider
, wie Sie in einem typischen gridview bezogene Maßnahmen wie actionIndex

sehen

Sie, dass der Datenprovider Usig eine Suche Modell als eine neue Klasse für YourmodelSearc() mit der Methode ist sehen bauen Suche()

public function actionIndex() 
{ 

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

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

und eine Suchfunktion tipically contail der find() und AndFliter() Funktion für Build dinamically die Abfrage für Datenprovider

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

So erstreckt, neu zu definieren oder die Suche zu manipulieren() oder eine neue customSeach bauen() Sie mehrere Filter anwenden oder variert werden das Standardverhalten für Abfragefilter

für den like Operator, wenn die yii2 Filter Standard nicht das, was Sie Sie könnten versuchen, das andWhere in string-Format zu verwenden.

die Tatsache tun, dass andFilterWhere don'k der Verwendung von wörtlicher conditition erlaubt Sie die Unterseite der Abfrage Bauordnung eine einfache UndWo Prüfung auf Nullwert hinzufügen können

$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

was soll ich tun Suche auf machen die Basis des Anfangsbuchstabens? Bedeutet, wenn ich "ab" in die Suchbox eingib. Es sollte Einträge geben, beginnend mit "ab" – Goli

+0

für einen String, der mit "ab" beginnt (alias in mysql wie 'ab%') das normale Verhalten von andFilter Wo sollte es reichen - stattdessen Wenn Sie eine Übereinstimmung für binäre 'ab' haben möchten, brauchen Sie = und nicht wie – scaisEdge

+0

tatsächlich nimmt es die Alphabates "% ab%" nicht "ab%". und ich will nur, dass es Ergebnis für die Zeichenfolge gibt, die mit alphabates in der Suchtextbox beginnt – Goli