php - Laravel 多对多表结构的正确方法
问题描述
我有一个多对多的关系。可以说我有很多用户可以在很多组中,反之亦然。
我不想制作包含以下列的表格
group_user
id / name / user_id / group_id
由于我只有 3 组初级、中级和高级,我不想为他们制作另一张单独的桌子。我的想法是采用以下方法:
- 使用以下数据在同一张表 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?
解决方案
我建议遵循以下正确程序:
表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);
}
这是推荐的继续方式。
推荐阅读
- node.js - Express session regenerate回调被多次调用
- javascript - 在js中的字符串之间添加空格
- php - 在运行相同代码的两台不同服务器上收到不同的 GoogleAuthenticator 代码
- c# - 如何使我的 C# 应用程序使用其 SQLite 数据库的副本实际部署?
- android - 如何使用 Exoplayer 播放从 Mediastore 获取的视频
- reactjs - 当 Firestore 已经在 Next.js 应用程序中运行时,它会继续尝试设置模拟器
- python - Pyautogui 无法正常工作!帮我
- pytorch - pytorch 预测崩溃会话中的 DeepAR 实例化
- html - 更改一个 div 内两个 div 的背景颜色 R Shiny
- php - 我必须通过 CURL 将输入字段(wordpress 中的表单)发送到远程 php