从一个到多个表Yii2调用另一个字段

时间:2018-06-07 03:55:08

标签: php yii2 yii2-advanced-app

我这里有问题。如何从用户表中调用字段“用户名”?我想在这里显示用户名而不是user_id。这里的图片: I want to show the username not the user_id in part 'Direquest oleh' and 'Disetujui/Ditolak oleh'

这里是我的代码:

[
            'attribute' => 'waktu_request',
            'label' => 'Waktu Request',
            'format' => ['DateTime', 'php:d M Y H:i:s'],
            'filter' => '',
        ],
        [
            'attribute'=>'requested_by',
            'label' => 'Direquest oleh',
            'value' => function($model){
                if($model->requested_by == NULL){
                    return '-';
                }else{
                    return $model->requested_by;
                }
            }
        ],
        [
            'attribute'=>'approved_rejected_by',
            'label' => 'Disetujui/Ditolak oleh',
            'value' => function($model){
                if($model->approved_rejected_by == NULL){
                    return '-';
                }else{
                    return $model->approved_rejected_by;
                }
            }
        ],

我希望有人能在这里解决我的问题。为了你的关注,我说谢谢。

2 个答案:

答案 0 :(得分:1)

如果您使用Gii生成模型和crud,则可能已经生成了名为getRequestedBy()getApprovedRejectedBy()的关系。

[
    'attribute'=>'requested_by',
    'label' => 'Direquest oleh',
    'value' => function($model){
        return ($model->requested_by) ? $model->requestedBy->username : '-';
    }
],
[
    'attribute'=>'approved_rejected_by',
    'label' => 'Disetujui/Ditolak oleh',
    'value' => function($model){
        return ($model->approved_rejected_by) ? $model->approvedRejectedBy->username : '-';
    }
],

不要忘记在searchModel中添加关系以进行急切加载,即减少查询次数。例如,

ModelName::find()->with(['requestedBy', 'approvedRejectedBy']);

答案 1 :(得分:-2)

首先,您需要在模型类中创建一个函数,如

public function getCreatedByText()
    {
        $user = User::findOne($this->created_by);
        if ($user != null) {
            return $user->username;
        }
        return '-';
    }

然后你就像那样分配这个功能

'label' => 'Created At',
'value' =>  $model->getCreatedAtText()

如果您不理解,请告诉我。我会尽力而为。