在同一张表上定义关系 Laravel 5.3
Posted
技术标签:
【中文标题】在同一张表上定义关系 Laravel 5.3【英文标题】:Defining relations on same table Laravel 5.3 【发布时间】:2018-01-08 03:03:53 【问题描述】:我的应用程序中有一个推荐系统。即,一个用户可以推荐其他用户。
用户表
id name
1 A
2 B
3 C
推荐表
id referrer_id referee_id
1 1 2
2 2 3
我想显示用户的推荐。
用户模型
public function referrals()
return $this->hasMany('App\Models\Referral','referee_id','id');
推荐模型
public function referrer_user()
return $this->belongsTo('Modules\User\Models\User','referrer_id','id');
public function referee_user()
return $this->belongsTo('Modules\User\Models\User','referee_id','id');
在 User 模型中定义 hasMany 关系,在 Referrals 模型中定义 belongsTo 关系,我没有得到想要的结果。
@foreach($user->referrals as $key => $referral)
dd($referral->referee_user->name)
@endforeach
这将返回用户本身的名称(推荐人)而不是推荐人
【问题讨论】:
您确定您正确地创建了推荐人吗?也许你在创建时切换 id?到目前为止,您的代码对我来说似乎还可以。 不正确 【参考方案1】:您以错误的方式引用多对多关系。
无论如何,下面的方式会更容易和高效。
id name referred_by
1 abc null
2 def 1
3 gfd 2
用户模型
/**
* Who did he bring onboard?
*/
public function referrals()
return $this->hasMany('....User', 'referred_by');
//Who brought him onboard..
public function referree()
return $this->belongsTo('...User', 'referred_by');
只需检查适当的语法。
【讨论】:
是的,我改变了它并且它的工作。我没有得到那个裁判()关系。你在用户模型中是什么意思? 一个用户可以推荐很多用户(referrals)。用户可能被其他用户(推荐人)推荐以上是关于在同一张表上定义关系 Laravel 5.3的主要内容,如果未能解决你的问题,请参考以下文章