Yii2和表名为user_type关系问题与用户表的用户模型

时间:2015-02-06 13:01:26

标签: php mysql model relationship yii2

我在高级应用程序中有一个user表和一个User模型。 UserUserType模型有一个关系,其表名为user_type,并且与Status模型有一个关系,其表名为status。这两个模型,即StatusUserType,与User模型有很多关系。

简而言之:在使用DetailView小部件的视图中,我发现了这个问题

<?= DetailView::widget([
        'model' => $model,
        'attributes' => [
            ['attribute' => 'profileLink', 'format' => 'raw'],
            'id',            
            'email:email',
            'statusName', //This works Fine
            'userTypeName', // This DOES NOT Work
            'roleName',
            'created_at',
            'updated_at',
        ],
    ]) ?> 

使用userTypeName会出现以下错误:

  

无效参数 - yii \ base \ InvalidParamException

     

关系名称区分大小写。 common \ models \ User有关系   named&#34; userType&#34;而不是&#34; UserType&#34;。

我尝试用UserTypeName替换它也会出现同样的错误

如果我使用了懒惰的查询,'userType.user_type_name'只会有效

但是,在User模型中,我已经在statusName方法中定义了userTypeNameattributeLabels()的属性,如下所示:

public function attributeLabels()
    {
        return [
        /* Your other attribute labels */
        'roleName' => Yii::t('app', 'Role'),
        'statusName' => Yii::t('app', 'Status'),
        /* ... */
        'userTypeName' => Yii::t('app', 'User Type'),
        'userTypeId' => Yii::t('app', 'User Type'),
        'userIdLink' => Yii::t('app', 'ID'),
        ];
    }

另外,我将关系定义如下:

public function getStatus()
    {
        return $this->hasOne(Status::className(), ['id' => 'status_id']);
    }

public function getUserType()
    {
        return $this->hasOne(UserType::className(), ['id' => 'user_type_id']);
    }

此外,我为statusNameuserTypeName定义了一个getter,如下所示:

public function getStatusName()
    {
        return $this->status ? $this->status->status_name : '- no status -';
    }

public function getUserTypeName()
    {
        return $this->userType ? $this->UserType->user_type_name : '- no user type -';
    }

我无法发现使statusName无法正常工作的userTypeName工作的pron = blem的根。表或模型甚至方法有没有错误的命名约定?!表名是否以另一个相关表的名称开头会导致这种情况?即useruser_type

1 个答案:

答案 0 :(得分:2)

你应该简单地纠正getUserTypeName,有一个拼写错误:

public function getUserTypeName()
{
    return $this->userType ? $this->userType->user_type_name : '- no user type -';
}