Yii2在一个GridView中使用两个模型

时间:2015-04-01 07:22:01

标签: php gridview model merge yii2

我有GridView,其中显示了员工对其工资单的摘要。这是一个更加理解的屏幕截图:

enter image description here

这些突出显示的列来自不同的模型,即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中的一个示例: enter image description here

1 个答案:

答案 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