Laravel适用于多对多表结构的正确方法

时间:2019-03-27 08:27:04

标签: php laravel migration table-structure

我有很多关系。可以说我有很多用户,这些用户可以位于许多组中,反之亦然。

我不会制作包含以下各列的表

group_user

id /名称/用户ID /组ID

由于我只有3个组,初级,中级和高级,所以我不想为他们另设一张桌子。我的想法是采取以下方法:

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

id /名称/用户ID /组ID

1 /初中/空/空

2 /中/空/空

3 /上级/空/空

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

我的记录将如下所示:

id /名称/用户ID /组ID

4 / NULL / 125/1->同一表中Junior组的ID。

5 / NULL / 125/3->同一表中高级组的ID。

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

1 个答案:

答案 0 :(得分:0)

我建议遵循以下正确步骤:

表1用户表: id |名称

表2分组表: id |名称

表3 group_user数据透视表: id | user_id | group_id

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

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

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

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

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

这是您将在“组”模型中使用的方法:

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

这是推荐的继续方法。