2016-09-09 10 views
0

Yii2を使用しています。外部キーのフィールドでフィルタ

テーブルalumnoのフィールドIDを指す外部キー 'alumno-id'を持つ 'calificacion'というテーブルがあります。

 [ 
      'header' => 'Alumno', 
      'attribute' => 'alumno.id', 
      'value' => 'alumno.name' 
     ], 

そして、それは完全に示していますが、フィルタは、列のヘッダに、表示されない:

GridViewのウィジェットで定義されたカラムです。私は卒業生の名前を書くためのテキストボックスを持っていて、フィルターにかけたい。それをどうすれば実現できますか?

EDIT:Here'reあなたが最初

public function getAlumno() 
{ 
    return $this->hasOne(Alumno::className(), ['id' => 'alumno_id']); 
} 

ようCalificacionの検索モデルに比べて、そのテーブルのモデルにおける関係 'calificacion' を定義する必要がありますファイルhttps://dl.dropboxusercontent.com/u/7059378/Desktop.zip

答えて

0

があることを設定します検証後にテーブルを結合しています。

$query->joinWith('alumno');

$query->andFilterWhere([ 
    'alumno.id' => $this.alumno_id 
]); 
+0

それは、インデックステーブルのフィールドを見ることができますが、検索することはできません!私はそのファイルで投稿を編集しました。 –

1

まずような検索セットより

はあなたのSearchModel内の属性を宣言します。検索モデルのルールの追加

public $alumno_name; 

[['alumno_name'], 'safe'], 

検索方法でalumno関係(supponsinblyあなたCalificacionモデルでalumno関係がある)に参加:ソートするには

$query = Calificacion::find() 
    ->joinWith(['alumno alumno']); 

$alumno_name追加:

あなたはより多くの情報 herehereを見つけることができます

[ 
    'attribute' => 'alumno_name', 
    'value' => 'alumno.name' 
], 

$query->andFilterWhere(['like', 'alumno.name', $this->alumno_name]); 

を最後に、あなたのグリッドビューの追加に:あなたが追加する必要があり、これをフィルタリングするに

また、headerの代わりに'label' => 'Alumno'を使用してください。

+0

偽の属性を追加する必要はありません。http://www.yiiframework.com/doc-2.0/guide-output-data-widgets.html#working-with-model-relations – soju

+0

ああ、いいですね。私はそれに気付かなかった。ありがとう! –

+0

それは、インデックステーブル上のフィールドを見ることができますが、検索することはできません!私はそのファイルで投稿を編集しました。 –