Laravel 具有多列的belongsToMany 数据透视表

标签 laravel

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

相关文章:

jquery - Laravel mix 未捕获引用错误 : jQuery is not defined

php - 在 Controller 中循环调用您自己的应用程序 api 是否明智?

php - 404 页面中的 Laravel 本地化

php - 如何在laravel(mysql)中将obj保存在db中

php - Eloquent - 在 selectRaw() 中插入变量

php - 如何将项目推送到 Laravel 查询中的数组?

php - 从生成的复选框中将多个条目插入数据库

database - laravel 5.6 中的 Redis 数据库缓存

Laravel 和 Redis - 尽管超时设置为 1800 秒,但 10 分钟后作业被终止

php - Laravel Collection 仅返回 11 个值