2017-12-28 33 views
0

私はYii-2を初めて使用しています。 インデックスページに、いくつかのエントリが表示されているグリッドビューがあります。Yii2-グリッド表示で検索ボックスを追加する方法

<?= GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'filterModel' => $searchModel, 
    'columns' => [ 
     ['class' => 'yii\grid\SerialColumn'], 
     //'meter_id', 

     [ 
      'label' => 'Meter MSN', 
      'value' => function ($d) { 
       return $d->meter->meter_msn; 
      }, 
      // 'filter' => Html::activeDropDownList($searchModel, 'meter_id', \app\models\Meters::toArrayList(), ['prompt' => "All Meters", 'class' => 'form-control']), 

     ], 
     'imsi', 
     'telecom', 
     'status', 
     [ 
      'label' => 'Created By', 
      'value' => function ($data) { 
       if (is_object($data)) 
        return $data->created->name; 
       return ' - '; 
      }, 
      //'filter' => Html::activeDropDownList($searchModel, 'created_by', \app\models\User::toArrayList(), ['prompt' => "Created By", 'class' => 'form-control']), 
     ], 
     'comments', 
     'historic', 


     ['class' => 'yii\grid\ActionColumn'], 
    ], 
]); ?> 

次に、Meter MSNに対して検索ボックスを追加します。上記のコードではフィルタは隠されていたので機能していましたが、代わりにドロップダウンを追加したくないので、検索ボックスが必要です。

以下

は私の検索クラスは、私はそれに検索ボックスを配置するにはどうすればよい

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

    // add conditions that should always apply here 

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

    $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 
    $query->andFilterWhere([ 
     'id' => $this->id, 
     'meter_id' => $this->meter_id, 
     'created_by' => $this->created_by, 
     'updated_by' => $this->updated_by, 
     'created_at' => $this->created_at, 
     'updated_at' => $this->updated_at, 
     'store_id' => $this->store_id, 
     'meter_serial'=>$this->meter_serial, 
     //   'historic' => $this->historic, 
     'status'=>'SIM Installed', 

    ]) 
     // ->orFilterWhere(['status'=>'Communication Failed']) 
    ; 

    //  $query->andFilterWhere(['like', 'meter_serial', $this->meter_serial]) 
    //  ->andFilterWhere(['like','meter_id',$this->meter_id]); 
    $query->orderBy(['id' => SORT_DESC]); 
    return $dataProvider; 
} 

のですか?単純検索クラスはデフォルトで検索機能を設定します。しかし、私のMSN値は関数から来ているので、私はどのように検索ボックスを置くことができないのか分かりません。 ご協力いただければ幸いです。

あなたの検索モデルに

public function search($params) 
{ 
    public $your_column; 

    // declare as safe 
    public function rules() 
    { 
    return [ 
     ... 
     [[ 'your_column', ], 'safe'], 

    ]; 
    } 

    $query = MetersInventoryStore::find(); 

を でpubblic VARを追加して、あなたをgrid_viewに

... 
'columns' => [ 
    ['class' => 'yii\grid\SerialColumn'], 
    //'meter_id', 

    [ 
     'attribute' => 'your_column', 
     'label' => 'Meter MSN', 
     'value' => function ($d) { 
      return $d->meter->meter_msn; 
     }, 
    ], 

をyour_columnそして、あなたのsearchModelを最後に参照する必要があり、計算列で[フィルタの追加フィールドの

+0

にいくつかのサンプルを見つけることができます。しかし、これがあなたの事件かどうかはわかりません。テーブルの値のメーターmsn?はいの場合は、db列で簡単な検索を行うことができます –

答えて

3

渡されたフィルター値に基づいて計算された列を適切に管理するためのフィルター条件を拡張する必要があります。

あなたはGIIでCRUDを作成する場合は、検索フォームを作成し、検索クラスを開発する_search.phpフォームを使用することができます。このチュートリアルhttp://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/

+0

正しい答えが正しいと表示されます – kiamoz

+0

はい、それは魅力的です:) –

関連する問題