php - Laravel 枢纽咨询
问题描述
我需要关于我的模特关系的建议,
逻辑
Group
有很多users
Group
有很多admins
User
有很多groups
(作为用户)User
有很多groups
(作为管理员)
数据库结构
- 组表
- 用户表
- Group_Users 表(保存用户 ID 和组 ID)
- Group_Admins 表(保存用户 ID 和组 ID)
关系代码
User model
public function groupsUser() {
return $this->hasMany(GroupUser::class);
}
public function groupsAdmin() {
return $this->hasMany(GroupAdmin::class);
}
Group model
public function users() {
return $this->hasMany(GroupUser::class);
}
public function admins() {
return $this->hasMany(GroupAdmin::class);
}
GroupUser model
public function group() {
return $this->belongsTo(Group::class);
}
public function user() {
return $this->belongsTo(User::class);
}
GroupAdmin model
public function group() {
return $this->belongsTo(Group::class);
}
public function user() {
return $this->belongsTo(User::class);
}
把招工广告
users
基本上,由于和之间的关系groups
是多对多的,通常我不需要模型,GroupUser
然后GroupAdmin
只使用sync()
函数来从这些表中添加/删除用户和组 ID。
那我有什么顾虑?
通常,当我想将批量 ID 输入到数据库中时(比如说向帖子添加标签,突然将 10 个标签 ID 与 1 个帖子相关联),我使用这种类型的连接,使用和删除模型的那一刻是sync()
有意义的,但在我的情况下,当用户加入/添加时一组一组,你对这种关系有什么建议?GroupUser
GroupAdmin
- 我目前的方法有意义吗?
- 如果我删除这些
GroupUser
和GroupAdmin
模型并将它们添加到user, group
模型中会更好:
public function users()
{
return $this->hasMany(User::class, 'group_users', 'user_id', 'id');
}
等等?
你认为最好的做法是什么?
解决方案
用户和组是多对多的
你的桌子是这样的吗?
users
, user_group
, groups
?
使用“belongsToMany”关系怎么样? Laravel 多对多关系
// User model
public function groups() {
return $this->belognsToMany(Group::class);
}
// Group model
public function users() {
return $this->belognsToMany(User::class);
}
并使用喜欢。
User::find(1)->groups; // return user 1 groups
User::find(1)->groups()->sync($groupIds); // relate user and groups
Group::find(1)->users; // return group 1 users
如果您的用户表中有角色列,则可以冷添加关系。
// Group model
public function users() {
return $this->belognsToMany(User::class)->where('role', 'the role of normal user');
}
public function admins() {
return $this->belognsToMany(User::class)->where('role', 'the role of admin user');
}
希望它可以帮助你。
推荐阅读
- java - Hibernate:ManyToMany 单向只返回一条记录
- regex - spring boot - 为什么@valid 不能在控制器上工作?
- python - Postgresql 和 Python:从 SQL 中选择数据(日期时间)
- flutter - Stagehand 不支持 Dart 2.3.1 错误
- javascript - 从不解析从 Node+Express API 到 MongoDB 的 HTTP 请求
- autohotkey - ahk同时点击多个区域
- xml - 如何在 XSLT 中处理未分组但相关的数据并生成分组输出?
- r - 如何通过 shinyApp 调用位于我桌面上的应用程序?
- tensorflow - Tacotron 与 TensorFlow Lite
- java - 线程“AWT-EventQueue-0”中的异常 java.lang.ArrayIndexOutOfBoundsException:23