在同一张表上定义关系 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的主要内容,如果未能解决你的问题,请参考以下文章

与关联对象在同一张表上的多对多关系

Laravel 定义同一张表的多对多关系

实体框架代码优先,同一张表上的多对多关系

TYPO3 版本中同一张表上的双向 n:m 关系。 4.7.2

mysql通过在同一张表上查询的自定义顺序

同一张表上的多个连接,在一个查询中计数