2015-04-01 55 views
0

我有一個GridView,它顯示員工對他/她的工資單的摘要。下面是更多的理解截圖:Yii2在一個GridView中使用兩種模型

enter image description here

那些突出的列來自不同的模型,它是User模型,其餘來自Payslip模型來。

如何在一個GridView中合併2個模型?因爲在GridView中,您更有可能擁有單個模型來顯示數據。但是2款車型呢?

下面是我Payslip模式代碼,請注意getUser()gii因爲user_id是一個外鍵在我payslip表中生成:

public function getUser() 
{ 
    return $this->hasOne(User::className(), ['user_id' => 'user_id']); 
} 

public function getFirstName() 
{ 
    return $this->user ? $this->user->fname : 'First Name'; 
} 

public function getLastName() 
{ 
    return $this->user ? $this->user->lname : 'Last Name'; 
} 

Payslip控制器

public function actionIndex() 
{ 
    $searchModel = new PayslipSearch(); 
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

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

然後Payslip觀點

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

      'payslip_id', 
      //'store_id', 
      'firstName', 
      'lastName', 
      'total_earnings', 
      'total_deduction', 
      'net_pay', 

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

順便說一句,在這個例子中,我剛剛創建的工資單#1手動給你演示。

附加信息: 登錄的用戶是BizAdmin用戶,以及所有BizAdmin員工的用戶應在工資單表(該表以上),即使這些人員的用戶還沒有任何工資單創建顯示爲他們。所以在默認情況下,該表將已經與員工的用戶下BizAdmin登錄的用戶佔用,這些工​​作人員的用戶誰仍然沒有建立任何將顯示工資單「創建工資單」

下面是KashFlow一個例子: enter image description here

回答

4

更新視圖:

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

      'payslip_id', 
      //'store_id', 
      ['value' => function ($data) {return $data->getFirstName();}, 'label' => 'First Name'], 
      ['value' => function ($data) {return $data->getLastName();}, 'label' => 'LastName'], 

      'total_earnings', 
      'total_deduction', 
      'net_pay', 

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

而且在$searchModel->search加你的關係,這樣的:

$query = Payslip::find()->with(['user']); 

讀取數據列 - http://www.yiiframework.com/doc-2.0/guide-output-data-widgets.html#data-column

相關問題