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

Yii2中未识别的模型关系

  •  2
  • codex  · 技术社区  · 7 年前

    我创建了两个名为User和ReferralsForm的模型,其中Users是父级,ReferralsForm是子级。有两个外键是我从用户那里分配给ReferralsForm的,但名称不同。我正在使用Gii生成我的模型以及关系。结构如下:

    User
    ------------
    users_id(PK),
    display_name,
    username,
    email,
    password,
    member_since,
    referral_hash
    
    ReferralsForm
    -------------
    referral_id(PK),
    userid(FK),
    referred_user_id(FK),
    status
    

    用户模型关系代码和属性

    public function getReferrals()
    {
        return $this->hasMany(ReferralsForm::className(), ['userid' => 'user_id']);
    }
    
    public function getReferrals0()
    {
        return $this->hasMany(ReferralsForm::className(), ['referred_user_id' => 'user_id']);
    }
    
    public function attributeLabels()
    {
        return [
            'user_id' => 'Userid',
            'username' => 'Username',
            'email' => 'Email',
            'display_name' => 'Display Name',
            'password' => 'Password',
            'member_since' => 'Member Since',
            'auth_key' => 'Auth Key',
            'referral_hash' => 'Referral Hash',
        ];
    }
    

    ReferralsForm模型关系代码和attributelabels

    public function getUser()
    {
        return $this->hasOne(User::className(), ['user_id' => 'userid']);
    }
    
    public function getReferredUser()
    {
        return $this->hasOne(User::className(), ['user_id' => 'referred_user_id']);
    }
    
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'userid' => 'Userid',
            'referred_user_id' => 'Referred User ID',
            'subscription_id' => 'Subscription ID',
            'status' => 'Status',
        ];
    }
    

    这是我的控制器:

    public function actionReferrals()
    {
        $query = User::find()->joinWith('ReferralsForm');
    
        $model = new User();
        $ref_hash = $model->getHash();
    
        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);  
        return $this->render('referrals' ,['dataProvider' => $dataProvider, 'ref_hash' => $ref_hash]);
    }
    

    还是给了我一个错误

    Invalid Argument – yii\base\InvalidArgumentException
    app\models\User has no relation named "ReferralsForm".
    
    Caused by: Unknown Method – yii\base\UnknownMethodException
    Calling unknown method: app\models\User::getReferralsForm()
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   ScaisEdge    7 年前

    如果您有一个关系名称referrals(getReferrals()),那么应该在joinWith中使用referrals

    $query = User::find()->joinWith('referrals');