【问题标题】:Laravel HasManyThrough, accesing Primary/Secondary user referralsLaravel HasManyThrough,访问主要/次要用户推荐
【发布时间】:2019-03-28 00:58:54
【问题描述】:

我有一个应用需要跟踪用户的主要和次要推荐。我的用户表如下所示:

用户表

  • 名称,varchar
  • 电子邮件,varchar
  • referral_id,varchar
  • referrer_id、varchar

我目前使用以下方式访问主要推荐人/推荐人:

public function referrer() 
{
    return $this->belongsTo(User::class, 'referrer_id', 'referral_id');
}

public function primaryReferrals() 
{
    return $this->hasMany(User::class, 'referrer_id', 'referral_id');
}

我正试图弄清楚如何访问“二级”推荐...例如。

用户 A 邀请用户 B。用户 B 然后邀请用户 D、E、F。从用户 A 模型中,我希望能够调用 $user->secondaryReferrals 之类的东西并获取用户 D、E、F。

我猜我需要使用类似的东西:

public function secondaryReferrals() 
{
    return $this->hasManyThrough(
        User::class, 
        User::class, 
        'referrer_id', 
        'referrer_id', 
        'referral_id', 
        'referral_id'
    );
}

但是我不清楚我应该提供哪些键/ID……或者这是否是正确的使用位。我尝试了混合,但在使用 sqlite 时不断收到 ambiguous column name 错误,在使用 mysql 驱动程序时出现其他错误。

用户A:{ referer_id:空, 推荐人ID:'abc' }

用户B:{ referrer_id: 'abc', 推荐人ID:'def' }

用户C:{ referrer_id: 'def', 推荐人ID:'ghi' }

我希望能够通过用户 B 的推荐代码从用户 A 访问用户 C。

【问题讨论】:

    标签: mysql laravel orm eloquent


    【解决方案1】:

    您不能在此处使用HasManyThrough 关系,因为无法指定表别名。

    您可以使用两次primaryReferrals 关系:

    public function getSecondaryReferralsAttribute() 
    {
        $this->load('primaryReferrals.primaryReferrals');
    
        return $this->primaryReferrals->pluck('primaryReferrals')->flatten();
    }
    
    // $user->secondaryReferrals
    

    【讨论】:

    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 2014-04-08
    • 1970-01-01
    • 2012-03-19
    • 2014-12-17
    • 1970-01-01
    相关资源
    最近更新 更多