Laravel HasManyThrough,访问主要/次要用户推荐



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

用户表

  • 姓名, 瓦尔查尔
  • 电子邮件, 瓦尔查尔
  • referral_id,瓦尔查尔
  • referrer_id,瓦尔查尔

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

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:空, referral_id:"ABC" }

用户 B:{ referrer_id:"ABC", referral_id:"定义" }

用户 C: { referrer_id:"def", referral_id:"嘟嘟" }

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

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

可以使用两次primaryReferrals关系:

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

最新更新