Laravel 5.3与同一型号的多对多关系

时间:2017-02-21 01:34:05

标签: laravel laravel-5 eloquent laravel-5.3

我正在开发一个CRM,我有一个用户模型,可以与其他用户建立多对多的关系,以及通过数据透视表定义的一种关系。

例如:

蒂姆 - >汤姆(同事)

蒂姆 - >史蒂夫(家庭成员)

蒂姆 - >乔恩(邻居)

在我的用户模型中我有这个,我使用数据透视表中的user1_id和user2_id作为外键:

public function relationships ()
{
    return $this->belongsToMany(User::class,null,'user1_id','user2_id')->withTimestamps()->withPivot('type');
}

哪个方向很好。所以,如果我这样称呼:

User::find($timsID)->relationships;

按预期工作,我会得到汤姆史蒂夫和乔恩作为结果。现在,如果我在该查询中使用Tom的ID,Tim将不会作为关系返回,因为当Tom的ID存储在user2中时,它正在搜索user1_id。

如果有任何外键匹配,是否有解决方案来提取记录?我不想为每个关系存储2条记录。

1 个答案:

答案 0 :(得分:1)

我会假设我理解你想做什么。 Laravel的关系在两个方向都有效。在您的情况下,您只定义了一个方向,但希望在两个方向上使用它。清除我的意思

public function peopleIKnow() {
    return $this->belongsToMany(User::class,null,'user1_id','user2_id')->withTimestamps()->withPivot('type');
}

public function peopleWhoKnowMe() {
    return $this->belongsToMany(User::class,null,'user2_id','user1_id')->withTimestamps()->withPivot('type');
}

这样你就有了两种关系。你可以在这个想法的基础上建立你想要的东西。