【问题标题】:Relationships with same foreign key to same table Laravel 5具有相同外键的关系到同一张表 Laravel 5
【发布时间】:2017-10-05 18:07:09
【问题描述】:

我正在构建一个推荐系统,表User被另一个引用,例如:

用户表:

id

name

推荐表:

id

referred_by (user_id)

refers_to (user_id)

同一张表的相同外键。 User 表和 Referrals 之间有哪些关系?

【问题讨论】:

  • 看起来您有一对多 (hasMany) 的用户到推荐和一对一的推荐给用户 (hasOne)。您必须为用户和被推荐人创建两种关系,一种指向referred_by 列,另一种指向refered_to 列。

标签: php laravel eloquent relationship


【解决方案1】:

我假设您的用户模型是 App\User,而您的推荐模型是 App\Referral

如果您想通过您的用户获取他们推荐的人,您可以在App\User

function  referredBy() {
    return $this->hasMany('App\Referral', 'referred_by');
}

如果您想通过您的用户了解他们的推荐人:

function referredTo() {
    return $this->hasMany('App\Referral', 'refers_to');
}   

任何有$user 对象的地方,都可以通过$user->referredTo()$user->referredBy() 获取所有其他引用用户的列表 Eloquent 模型允许您使用不同的键名创建许多不同的样式关系。

参考:https://laravel.com/docs/5.5/eloquent-relationships#introduction

【讨论】:

    【解决方案2】:

    这个问题有点模棱两可,但如果你想在同一个表中建立关系,可以这样做 -

    在架构中构建表“referrals_table”时 -

    $table->foreign('refers_to')->references('referred_by')->on('referrals_table')
    

    在模型中,关系将是(假设此模型文件的名称是 ReferralTable)-

    public function name_your_function() {
        returns $this->belongsTo(ReferralTable::class)
    }
    

    你现在可以调用这个函数来使用它。

    【讨论】:

      猜你喜欢
      • 2020-04-20
      • 1970-01-01
      • 2018-06-13
      • 2018-11-23
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 2019-05-01
      相关资源
      最近更新 更多