我目前在数据库中有两个表和一个数据透视表,当我需要进行belongsToMany 查找时可以将它们连接起来。基本示例是一个数据库表是“团队”,另一个是“成员”。我可以在团队和成员模型上利用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 吗?我如何将其与另一个模型/表格相关联?
最佳答案
这很常见,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
回答第二部分,它本质上是一个“三重枢轴”,需要额外的功能。看
Laravel - Pivot table for three models - how to insert related models?
有关更多信息和相关包(由该问题的回答者提供,未维护,但作为示例很好)
https://github.com/jarektkaczyk/Eloquent-triple-pivot
关于Laravel 具有多列的belongsToMany 数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49370881/