当我需要进行belongsToMany查找时,我目前在数据库中有两个表和一个数据透视表来连接它们。基本的例子是一个DB表是'团队'另一个是'成员'。我可以在团队和成员模型上使用belongsToMany方法来拉开彼此之间的关系。一个团队可以拥有许多成员,一个成员可以属于许多团队。
public function teams()
{
return $this->belongsToMany(Team::class);
}
public function members()
{
return $this->belongsToMany(Member::class);
}
Pivot: team_member
team_id | member_id
---------------------
1 | 1
2 | 1
3 | 2
1 | 2
如何扩展该数据透视表以包含每个团队的成员类型?例如,member1是team1的领导者。 member1是team2的助手。 member1是team3上的通用成员......依此类推。我可以在同一个数据透视表中添加一列吗?它是membertype_id吗?如何将其与另一个模型/表格相关联?
答案 0 :(得分:1)
这很常见,Laravel已经处理过了。向数据透视表中添加额外的列并展开您的关系以使用withPivot()
:
public function teams(){
return $this->belongsToMany(Team::class)->withPivot(["teamRole", ...]);
}
然后访问就像:
一样简单$user = \App\User::with(["teams"])->first();
$team = $user->teams->first();
$teamRole = $team->pivot->teamRole;
有关详细信息,请参阅文档:
https://laravel.com/docs/5.6/eloquent-relationships
要回答第二部分,它本质上是一个" Triple Pivot",需要额外的功能。见
Laravel - Pivot table for three models - how to insert related models?
获取更多信息,以及相关的套餐(由该问题的回答者提供,未进行维护,但有一个例子)