代码之家  ›  专栏  ›  技术社区  ›  SaidbakR

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

  •  0
  • SaidbakR  · 技术社区  · 10 年前

    我有一个 user 表和a User 中的模型 高级应用程序。这个 使用者 有一个关系 UserType 其表所命名的模型 user_type 而且它与 Status 其表所命名的模型 status 。两个模型,即。 地位 用户自定义类型 ,与…有许多关系 使用者 模型

    简而言之,问题是:在使用 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具有关系 命名为“userType”而不是“userType”。

    我试着用 UserTypeName 也给出了相同的错误

    它只起作用 如果我使用了惰性查询,即 'userType.user_type_name' !

    然而,在 使用者 模型我已经定义了两者的属性 statusName 用户类型名称 在里面 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']);
        }
    

    此外,我为两者定义了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 -';
        }
    

    我无法发现造成这种问题的根源 状态名称 工作时 用户类型名称 不起作用。表、模型甚至方法是否有任何错误的命名约定?!表名是否以另一个相关表的名称开头?即 使用者 用户类型 ?

    1 回复  |  直到 10 年前
        1
  •  2
  •   soju    10 年前

    你应该简单地纠正 getUserTypeName ,有一个错别字:

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