2016-12-01 6 views
0

私はテーブルを表示するためにGridViewを使いました。ここで必要なのは、フィールドがアクティブなデータベーステーブルの場合は、が1の場合は値が表示され、それ以外の場合は値が表示されません。 さて、これはこれは私がコントローラで使用されるが、私はどのように今すぐ{yii2のデータベース内のフィールドに基づいてGridviewを表示

$searchModel = new \app\models\MissingSearch(); 

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

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

}

public function actionListfound() 

をすることができます動作していないそのものですGridViewの

<div class="col-lg-10"> 
      <?php 
      $cat= Missing::find()->where(['active' => 0])->all(); 
      ?> 

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

      // 'miss_id', 
      'patron_id', 
      'Book_Id', 
      'Missed_date', 
      'Found_date', 
      // 'active', 

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

の私のコードですGridViewに表示します。

+0

MissingSearchモデル –

+0

MissingSearchモデルのadd - > where(['active' => 1]) –

答えて

1

GridViewdataProvider属性で指定されたデータモデルを使用して、GridViewが生成されます。あなたのコードでは、これは$dataProviderです。したがって、$dataProviderを準備するときは、フィルタactive=1を適用する必要があります。お使いのコントローラのコードに基づいて

UPDATE

、あなたはMissingSearchモデルのsearch関数内でフィルタを設定する必要があります。あなたのさらなるコメントを1として

public function search($params) 
{ 
    $query = Missing::find()->where(['active' => 1]); 

    // add conditions that should always apply here 

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

... //more code 

UPDATE 2

、あなたは、2つのページに同じ検索モデルを使用している - しかし、要件が1ページであるあなたはどこactive=0active=1と二番目のデータが表示されます。

MissingSearchモデル

public function search($params, $activeFlag = 0) 
{ 
    $query = Missing::find()->where(['active' => $activeFlag]); 

    // add conditions that should always apply here 

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

    ... //more code 

そして、あなたのコントローラからあなたが$activeFlagの適切な値を送信することができます。これは、次の変更を導入することによって達成することができます。あなたが投稿コントローラーのコードは、現在のように書くことができます:あなたはactive=0とのデータを示している他のページのコントローラのアクションで同様

public function actionListfound() 
{ 
    $active = 1; 
    $searchModel = new \app\models\MissingSearch(); 

    $dataProvider = $searchModel->search(Yii::$app->request->queryParams, $active); 

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

、単に$active = 0;を設定する必要があります。

+0

sm1979ここで私はあなたに上記のコントローラを見せてくれました。 –

+0

コントローラでは、値を '$ dataProvider'に2回再割り当てします。それは問題だ。 $ dataProvider = \ app \ models \ Missing :: find() - > where(['active' => 0]) - > one(); 'を削除してください。次に、 'MissingSearch'モデルの' search() '関数でフィルタを設定する必要があります。 – sm1979

+0

'search'関数の最初の行は、通常、次のようになります:' $ query = Missing :: find(); '。フィルタを含めるようにこの行を変更します。また、あなたが ' - > where(['active' => 0])'を使っていることに気付きました。しかし、私が理解しているように '' active = 1'のレコードだけが '' GridView'に表示されるべきだと言ったので、(['active' => ** 1 **]) ' – sm1979

関連する問題