我正在开发一个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条记录。
答案 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');
}
这样你就有了两种关系。你可以在这个想法的基础上建立你想要的东西。