我有GridView
,其中显示了员工对其工资单的摘要。这是一个更加理解的屏幕截图:
这些突出显示的列来自不同的模型,即User
模型,而其余模型来自Payslip
模型。
如何在一个GridView
中合并两个模型?因为在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用户下的员工用户占用,并且那些仍然没有创建工资单的员工用户将被指示&#34;创建薪资单&#34;
以下是KashFlow中的一个示例:
答案 0 :(得分: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