首页 文章

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

提问于
浏览
0

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

例如:

蒂姆 - >汤姆(同事)

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

蒂姆 - >乔恩(邻居)

在我的用户模型中,我有这个,我使用数据透视表中的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 回答

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

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

相关问题