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

Call another field from one to many table Yii2

我这里有问题。如何从用户 table 调用字段 'username'?我想在这里显示用户名而不是 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;
                }
            }
        ],

我希望任何人都可以在这里解决我的问题。感谢您的关注。

首先你需要在模型中创建一个函数 class,就像

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

然后你像那样分配这个函数

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

如有不明白的,请教我know.I会尽力的

如果您使用 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']);