我有一个应用程序,需要跟踪用户的主要推荐人和次要推荐人。我的用户表如下:
用户表
我目前使用以下方式访问主要推荐人/推荐人:
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'
);
}
但是我不清楚我应该提供什么键/标识...或者这是否是正确的选择。我尝试了混合,但使用sqlite时出现ambiguous column name
错误,而使用mysql驱动程序时却出现其他错误。
UserA:{ Referer_id:null, referral_id:“ abc” }
UserB:{ Referrer_id:“ abc”, referral_id:“ def” }
UserC:{ Referrer_id:“ def”, referral_id:“ ghi” }
我希望能够通过用户B的推荐代码从用户A访问用户C。
答案 0 :(得分:0)
您不能在这里使用HasManyThrough
关系,因为无法指定表别名。
您可以两次使用primaryReferrals
关系:
public function getSecondaryReferralsAttribute()
{
$this->load('primaryReferrals.primaryReferrals');
return $this->primaryReferrals->pluck('primaryReferrals')->flatten();
}
// $user->secondaryReferrals