我在yii2高级应用程序中有一个user
表和一个User
模型。 User
与UserType
模型有一个关系,其表名为user_type
,并且与Status
模型有一个关系,其表名为status
。这两个模型,即Status
和UserType
,与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
方法中定义了userTypeName
和attributeLabels()
的属性,如下所示:
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']);
}
此外,我为statusName
和userTypeName
定义了一个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的根。表或模型甚至方法有没有错误的命名约定?!表名是否以另一个相关表的名称开头会导致这种情况?即user
和user_type
?
答案 0 :(得分:2)
你应该简单地纠正getUserTypeName
,有一个拼写错误:
public function getUserTypeName()
{
return $this->userType ? $this->userType->user_type_name : '- no user type -';
}