Laravel属于具有多列的ToMany pivot

时间:2018-03-19 19:26:27

标签: laravel

当我需要进行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吗?如何将其与另一个模型/表格相关联?

1 个答案:

答案 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?

获取更多信息,以及相关的套餐(由该问题的回答者提供,未进行维护,但有一个例子)

https://github.com/jarektkaczyk/Eloquent-triple-pivot