首页 > 解决方案 > Laravel 多对多表结构的正确方法

问题描述

我有一个多对多的关系。可以说我有很多用户可以在很多组中,反之亦然。

我不想制作包含以下列的表格

group_user

id / name / user_id / group_id

由于我只有 3 组初级、中级和高级,我不想为他们制作另一张单独的桌子。我的想法是采用以下方法:

  1. 使用以下数据在同一张表 group_user 中创建 3 条记录

id / name / user_id / group_id

1 / 初中 / null / null

2/中间/空/空

3 / 高级 / null / null

所以现在当我想插入一个 group_id 时,我将使用我刚刚使用 NULL user_id 和 group_id 创建的这 3 个 ID。

我的记录将如下所示:

id / name / user_id / group_id

4 / NULL / 125 / 1 -> 在同一个表中的 Junior 组的 id。

5 / NULL / 125 / 3 -> 同一张表中的 Senior group 的 id。

Is this a valid way to do it? How wrong it is?

标签: phplaravelmigrationtable-structure

解决方案


我建议遵循以下正确程序:

表1 users表:id | 姓名

表 2 分组表:id | 姓名

表 3 group_user 数据透视表:id | 用户 ID | group_id

注意:表 3 不应包含可为空的值

关系如下,现在我们有两个模型,一个用户模型和一个组模型。

两者都将具有彼此之间的 belongsToMany 关系。

这是您将在 User 模型中使用的方法:

public function groups()
{
    $this->belongsToMany(User::class);
}

以下是您将在 Group 模型中使用的方法:

public function users()
{
    $this->belongsToMany(Group::class);
}

这是推荐的继续方式。


推荐阅读