【问题标题】:Laravel belongsToMany pivot with multiple columnsLaravel belongsToMany 具有多列的枢轴
【发布时间】:2018-08-28 11:31:41
【问题描述】:

我目前在数据库中有两个表和一个数据透视表,以便在我需要进行 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


【解决方案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

回答第二部分,本质上是一个“三重轴”,需要额外的功能。见

Laravel - Pivot table for three models - how to insert related models?

有关更多信息和相关包(由该问题的回答者提供,未维护,但作为示例很好)

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

【讨论】:

  • 我正朝着那个方向前进,但无法掌握如何与数据透视表中的另一列相关联。看起来我可以做一个“team_member_role”数据透视表,每列都有一个模型。然后我可以这样做: $team->members->find($id)->roles()->wherePivot('member_id', $member->id)->get();
  • 不错;一目了然,它看起来应该可以工作。我只在枢轴上遇到过非关系列(例如price),但看起来可以处理另一层复杂性。干杯!
  • 回到这个话题。我怎样才能得到一个包含 3 个关系的集合,以便我可以列出它?几乎就像一个名册表。对于一个团队,列出该团队的所有成员及其角色。并通过一个 Eloquent 调用来做到这一点???
  • 如果您还有其他问题,最好再问一个问题,并在必要时参考。在高层次上,您只需在 ->with() 子句中使用多个值,例如 ->with(["users", "users.role", ...]) 等,即可在一个雄辩的调用中获取所有信息。
猜你喜欢
  • 2016-08-13
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 2017-08-14
  • 2017-04-27
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多