typescript - TypeORM 多对多连接表额外列
问题描述
我与 TypeORM 有简单的多对多关系
用户实体
@Entity({ name: 'users' })
export class User {
@PrimaryColumn()
id: string;
@Column()
email: string;
@Column()
password: string;
@ManyToMany((type) => Organization, (organization) => organization.users)
@JoinTable({
name: 'user_organizations',
joinColumn: {
name: 'user_id',
referencedColumnName: 'id',
},
inverseJoinColumn: {
name: 'organization_id',
referencedColumnName: 'id',
},
})
organizations: Organization[];
组织实体
@Entity({ name: 'organizations' })
export class Organization {
@PrimaryColumn()
id: string;
@Column()
name: string;
@ManyToMany((type) => User, (user) => user.organizations)
users: User[];
}
我的目标是创建一种关系,它不仅定义了哪个用户与哪个组织相关,它还应该包含用户与组织相关的角色信息。我的想法是用一个额外的role
列来扩展关系表。
create table user_organizations(
user_id varchar(64) not null,
organization_id varchar(64) not null,
role varchar(64) not null,
foreign key (user_id) references users(id),
foreign key (organization_id) references organizations(id),
);
我的问题是如何将角色存储在数据库中。目前我正在做这样的事情。
let user = new User();
let organization = new Organization();
organization.name = name;
organization.users = [user];
organization = await this.organizationRepository.save(organization);
如何role
通过 TypeORM 填充该列?
解决方案
解决此类问题的最佳方法是单独创建一个单独的表Role
,然后在user_organizations
.
但是考虑一下这种情况——如果用户没有一个角色怎么办?它可以而且确实会发生。话虽如此,我的建议是处理桌子之外的角色。user_organisations
由于该表是M2M,因此主键将是User.ID
和的组合Organisation.ID
。我的建议是:
- 为所有角色(如用户或组织)创建单独的表
Roles
在和之间创建 M2M 表UserOrganisations
推荐阅读
- google-cloud-firestore - Firestore 安全规则 - 可以通过数组保护 doc 包含来自另一个数组的任何值
- google-sheets - 如何匹配匹配值的格式?*谷歌表格
- flutter - Flutter Cupertino/Material 组合主题/共享字体家族
- react-native - 如何使用 react-navigation 跨堆栈/选项卡导航器实现共享搜索栏输入?
- node.js - Docker Influx DB 和 Nodejs - 连接被拒绝
- java - 使用代码进行线性散列或探测错误
- android - 挡屏时后台服务关闭,仅限华为
- django-rest-framework - 根据加入日期过滤用户
- pandas - pandas 合并数量怎么解决?
- assembly - 如何解决在 Qtspim 中的 0x00400024 错误代码处执行非指令的尝试?