2017-01-17 4 views
2

In meiner Benutzertabelle habe ich Felder wie Vorname und Nachname. dann generierte ich eine Views mit Gii.In meiner Indexseite habe ich jetzt Vorname, Nachname, Benutzername etc ....Yii2 Grid Ansicht sortieren und filtern mit benutzerdefinierten Label

Ich verkettete meinen Faust- und Nachnamen als Name.

[ 
    'attribute'=>'firstname', 
    'label' => 'Name', 
    'format' => 'raw', 
    'value' => function ($data) { 
    return Html::a($data->Name); 
    }, 
],  

In Modell

public function getName() 
{ 
    return $this->firstname.' '.$this->lastname; 
} 

leider nicht in der Lage ist ich das Namensfeld mit dem Nachnamen sucht ... Ich brauche das Feld zu filtern sowohl mit Vornamen und Nachnamen.
Kann mir bitte jemand helfen ....
Vielen Dank im Voraus. Diese

+0

show 'searchModel'. –

Antwort

1

ist, wie Sie Setup-Suchmodell (ich nicht Ihre anderen Spalten enthalten, so treten sie nicht auf jene vergessen)

Sie können mehr finden Sie hier: http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/

class UserSearch extends User 
{ 
    public $name; 

    public function rules() 
    { 
     return [ 
      [['name'], 'safe'], 
      // some other rules ... 
     ]; 
    } 

    public function scenarios() 
    { 
     // bypass scenarios() implementation in the parent class 
     return Model::scenarios(); 
    } 

    public function search($params) 
    { 
     $query = User::find(); 

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

     $dataProvider->sort->attributes['name'] = [ 
      'asc' => ['lastname' => SORT_ASC, 'firstname' => SORT_ASC], 
      'desc' => ['lastname' => SORT_DESC, 'firstname' => SORT_DESC], 
      'label' => 'Name', 
      'default' => SORT_ASC 
     ]; 

     $this->load($params); 

     if (!$this->validate()) { 
      // uncomment the following line if you do not want to return any records when validation fails 
      // $query->where('0=1'); 
      return $dataProvider; 
     } 

     // grid filtering conditions 

     // some other filters ... 
     $query->andFilterWhere([ 
      'or', 
      ['like', 'lastname', $this->name], 
      ['like', 'firstname', $this->name], 
     ]); 

     return $dataProvider; 
    } 
} 

Und in Ihrem Gridview statt

[ 
    'attribute'=>'firstname', 
    // ... 
], 

verwenden nur

[ 
    'attribute'=>'name', 
], 
+0

Danke Kumpel, es funktioniert wirklich ... –

Verwandte Themen