【问题标题】:Defining relations on same table Laravel 5.3在同一张表上定义关系 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?到目前为止,您的代码对我来说似乎还可以。
  • 不正确

标签: laravel eloquent laravel-5.3


【解决方案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)。用户可能被其他用户(推荐人)推荐
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 2020-02-21
  • 1970-01-01
  • 2020-04-20
  • 2018-11-23
  • 1970-01-01
  • 2020-09-16
相关资源
最近更新 更多