mysql - Laravel HasManyThrough,访问主要/次要用户推荐

标签 mysql laravel orm eloquent

我有一个应用程序,需要跟踪用户的主要和次要推荐。我的用户表如下所示:

用户表

  • 名称,varchar
  • 电子邮件、varchar
  • referral_id,varchar
  • referrer_id,varchar

我目前使用以下方式访问主要推荐人/推荐人:

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'
    );
}

但是我不清楚我应该提供哪些键/ID...或者这是否是正确的使用位。我尝试了混合,但在使用 sqlite 时不断出现列名不明确错误,在使用 mysql 驱动程序时不断出现其他错误。

用户A:{ 引用者 ID:空, Referral_id: 'abc' }

用户B:{ Referrer_id: 'abc', 推荐 ID:'def' }

用户C:{ Referrer_id: 'def', Referral_id: 'ghi' }

我希望能够通过用户 B 的推荐代码从用户 A 访问用户 C。

最佳答案

此处不能使用 HasManyThrough 关系,因为无法指定表别名。

您可以使用 primaryReferrals 关系两次:

public function getSecondaryReferralsAttribute() 
{
    $this->load('primaryReferrals.primaryReferrals');

    return $this->primaryReferrals->pluck('primaryReferrals')->flatten();
}

// $user->secondaryReferrals

关于mysql - Laravel HasManyThrough,访问主要/次要用户推荐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52954966/

相关文章:

.net - 像 MySQL 这样的开源数据库可以支持我网站的负载吗?

php - Laravel 5 调用未定义的方法 Illuminate\Database\Query\Builder::method()

laravel - Laravel在域和子域中共享cookie检测问题

php - 在 Laravel 5.3 中创建相关模型实例时出错

Mysql删除约束

mysql - 从 SQL 触发器调用 AWS SNS 主题

php - Laravel 中第三方 API 连接的最佳位置

python - 用于 MySQL 的 Peewee ORM JSONField

java - jpa 中的可空 Map 映射

java - MySQL 在使用 coalesce() 更新重复键时插入会调用 java 中的语法错误