2017-08-29 69 views
0

我正在使用yii2 Framework。我想在GridView中,其中狀態= 1數據庫enter image description here如何僅在yii2 gridview中顯示修復記錄

這是GridView控件的屏幕截圖我只想強調其狀態爲1 視圖頁面是本規範的記錄只有幾個記錄 - :

<p>All Issued Devices are Highlighted </p> 
<?php 

use yii\helpers\Html; 
use yii\grid\GridView; 

/* @var $this yii\web\View */ 
/* @var $searchModel frontend\models\DeviceTrackerSearch */ 
/* @var $dataProvider yii\data\ActiveDataProvider */ 

//$this->title = 'Tracked Devices'; 
//$this->params['breadcrumbs'][] = $this->title; 
?> 
<b style="font-size: 30px;">ALL ISSUED DEVICES ARE HIGHLIGHTED </b> 
<div class="device-tracker-index"> 

    <h1><?= Html::encode($this->title) ?></h1> 
    <?php // echo $this->render('_search', ['model' => $searchModel]); ?> 

    <?= GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'filterModel' => $searchModel, 
     'rowOptions'=>function($model) 
     { 
      if($model->status == '1') 
      { 
       return ['class'=>'info']; 
      } 
      else 
      { 
       return ['class'=>'default']; 
      } 


     }, 

     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 
      [ 
       'attribute'=>'devices_device_id', 
       'value'=>'devicesDevice.device_name' 



      ], 
      //'id', 
      //'devices_device_id', 
      'user_first_name', 
      'user_last_name', 
      'email_address:email', 
      // 'user_department', 
      'assign_date', 
      'return_date', 
      //'status', 
      //'Issued_by', 
      [ 

       'attribute'=>'Issued_by' , 
       'value'=>'issuedBy.first_name' 
      ], 

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

請告訴我如何解決問題?

控制器的動作是 -

public function actionReturn() 
    { 
     // echo "welcome";die; 
     if(isset(Yii::$app->user->identity->user_type)) 
     { 
     $status = Yii::$app->user->identity->user_type; 
     if($status == 1) 
     { 
     $this->layout = 'headerLayoutSuperadmin'; 
     $searchModel = new DeviceTrackerSearch(); 
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

     return $this->render('index1', [ 
      'searchModel' => $searchModel, 
      'dataProvider' => $dataProvider, 
     ]); 
     } 
     else 
     { 
     $this->layout = 'headerLayout'; 
     $searchModel = new DeviceTrackerSearch(); 
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

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

      return $this->redirect(array('site/login')); 
     } 

    } 

SQL搜索模型 - :

<?php 

namespace frontend\models; 

use Yii; 
use yii\base\Model; 
use yii\data\ActiveDataProvider; 
use frontend\models\DeviceTracker; 

/** 
* DeviceTrackerSearch represents the model behind the search form about `frontend\models\DeviceTracker`. 
*/ 
class DeviceTrackerSearch extends DeviceTracker 
{ 
    /** 
    * @inheritdoc 
    */ 
    public function rules() 
    { 
     return [ 
      [['id', 'status', 'Issued_by'], 'integer'], 
      [['user_first_name', 'devices_device_id', 'user_last_name', 'email_address', 'user_department', 'assign_date', 'return_date'], 'safe'], 
     ]; 
    } 

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

    /** 
    * Creates data provider instance with search query applied 
    * 
    * @param array $params 
    * 
    * @return ActiveDataProvider 
    */ 
    public function search($params) 
    { 
     $query = DeviceTracker::find(); 
     //$query = DeviceTracker::findAll('status=>1'); 
     // print_r($query);die; 
     //echo $query;die; 
     // 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; 
     } 
     $query->joinWith('devicesDevice'); 
     // grid filtering conditions 
     $query->andFilterWhere([ 
      'id' => $this->id, 
      //'devices_device_id' => $this->devices_device_id, 
      'assign_date' => $this->assign_date, 
      'return_date' => $this->return_date, 
      'status' => $this->status, 
      'Issued_by' => $this->Issued_by, 
     ]); 

     $query->andFilterWhere(['like', 'user_first_name', $this->user_first_name]) 
      ->andFilterWhere(['like', 'user_last_name', $this->user_last_name]) 
      ->andFilterWhere(['like', 'email_address', $this->email_address]) 
      ->andFilterWhere(['like', 'user_department', $this->user_department]) 
      ->andFilterWhere(['like', 'devices.device_name', $this->devices_device_id]); 

     return $dataProvider; 
    } 
} 
+0

你有什麼已經嘗試過?這不是一個編程解決方案服務網站。 –

+0

哪些數據類型是狀態字段? – scaisEdge

+0

狀態是整數數據類型1或0 –

回答

0
在搜索模型

,更新查詢,以適應您想通過查看輸出。 像這樣在當前條件,即要顯示只有那些行狀態爲1

所以,

$query->andFilterWhere([ 
      'id' => $this->id, 
      //'devices_device_id' => $this->devices_device_id, 
      'assign_date' => $this->assign_date, 
      'return_date' => $this->return_date, 
      'status' => 1, // **this is where you are filtering the data with status == 1** 
      'Issued_by' => $this->Issued_by, 
     ]); 

和流程的簡要說明是

  • 您的控制器,它調用dataProvider,給你傳遞查看數據,然後最終到gridView
  • 數據存儲在mysql表中,所以無論你想發送給你查看的數據你需要查詢我噸的searchModel在數據提供程序的查詢
  • 回報dataProvide到控制器>視圖> gridWidget
+0

謝謝先生。它工作正常。現在我清楚這個流程。謝謝 –