我有2个以下具有多对多关系的
实体*用户实体(用户实体拥有的关系)
import { Entity, Column, PrimaryGeneratedColumn, UpdateDateColumn, ManyToMany, JoinTable, CreateDateColumn } from 'typeorm';
import { Role } from './role.schema';
@Entity('Users')
export class User {
@PrimaryGeneratedColumn({ name: 'Id' })
id: number;
@Column({
name: 'Email',
length: 100,
unique: true
})
email: string;
@Column({
name: 'FirstName',
length: 30
})
firstName: string;
@Column({
name: 'LastName',
length: 30
})
lastName: string;
@ManyToMany(type => Role, { eager: true })
@JoinTable({
name: 'UserRoles',
joinColumns: [
{ name: 'UserId' }
],
inverseJoinColumns: [
{ name: 'RoleId' }
]
})
roles: Role[];
}
Run Code Online (Sandbox Code Playgroud)
*角色实体(具有两个现有角色:管理员和用户)
import { Entity, Column, PrimaryGeneratedColumn, ManyToMany } from 'typeorm';
import { User } from './user.schema';
@Entity("Roles")
export class Role {
@PrimaryGeneratedColumn({ name: 'Id' })
id: number;
@Column({
name: 'Name',
length: 50,
unique: true
})
name: string;
@ManyToMany(type => User, user => user.roles)
users: User[];
}
Run Code Online (Sandbox Code Playgroud)
应用程序的设计使得角色名称以数组形式(例如['Admin','User'])以请求的形式发送
现在,在插入用户时,
当前我首先根据请求中接收到的角色名称数组从数据库中检索Role对象(以分配所需的角色),
然后将其分配给User对象(roles属性),
然后最后在User上调用save方法对象以将记录插入User表中。
片段:
createConnection(connectionConfig as ConnectionOptions).then(async connect => {
let userRepo = connect.getRepository(User);
let roleRepo = connect.getRepository(Role);
let roles = ['Admin', 'User'];
let user = userRepo.create();
return roleRepo.createQueryBuilder('role').where('role.name IN (:roleNames)', {roleNames : roles}).getMany().then((roles) => {
user.email = 'test1@test.test';
user.firstName = 'TestFName';
user.lastName = 'TestLName';
user.roles = roles;
return userRepo.save(user)
})
}).catch(error => {
console.log(error);
});
Run Code Online (Sandbox Code Playgroud)
这导致许多数据库调用。如果有人可以用更聪明,更优雅的方式启发我,那将是很棒的(使用流畅的QueryBuilder来达到上述效果)
| 归档时间: |
|
| 查看次数: |
1431 次 |
| 最近记录: |