Typeorm 无法创建表之间的关系
Typeorm cannot create relations between tables
出现错误“无法读取未定义的属性(读取 'joinColumns')”
如何实现:用户只能分配一个对资源有权限的角色?
之前用过sequilize,typeorm我是newbee
user_roles table 实体:
@Entity({ name: 'user_roles' })
export class UserRoleEnitity extends DateAudit implements IUserRole {
@Column('varchar')
name: string;
@Column('varchar', {
nullable: true,
})
description?: string;
@Column('boolean', {
name: 'is_active',
default: false
})
isActive?: boolean;
@OneToMany(() => RolePermissionsEnitity, permission => permission.id)
permissions: IUserRolePermission[];
}
和用户实体:
@Entity({ name: 'users' })
export class UserEnitity extends DateAudit implements IUser {
@JoinColumn({ name: 'role_id' })
roleId: string;
@OneToMany(() => UserRoleEnitity, role => role.id)
role: UserRoleEnitity;
@Column('varchar', {
unique: true,
})
username: string;
@Column('varchar')
password: string;
@Column('varchar', {
nullable: true,
})
email?: string;
@Column('varchar', {
name: 'mobile_number',
nullable: true,
})
modileNumber?: string;
@Column('varchar', {
nullable: true,
})
name?: string;
@Column('varchar', {
nullable: true
})
position?: string;
@Column({
name: 'is_verified',
default: true
})
isVerified?: boolean;
@Column('timestamp', {
name: 'password_modified_at',
default: new Date()
})
passwordModifiedAt?: Date;
}
和role_permissions
@Entity({ name: 'user_role_permissions' })
export class RolePermissionsEnitity extends DateAudit implements IUserRolePermission {
@JoinColumn({ name: 'role_id' })
roleId: string;
@ManyToOne(() => UserRoleEnitity)
role: IUserRole;
@Column({
type: 'enum',
enum: Actions,
default: Actions.READ
})
action: Actions;
@JoinColumn({ name: 'resource_id' })
resourceId: string;
@ManyToOne(() => ResourceEntity, resource => resource.id)
resource: IResource;
}
当我这样查询存储库时:
const userEntity = await this._userRepository.findOne({
where: {
username,
},
relations: ['role']
});
您的父实体不应引用 ID,您应该与定义您的用户实体的字段有关系。
像这样:
用户角色实体
@OneToMany(() => RolePermissionsEnitity, permission => permission.role)
permissions: IUserRolePermission[];
用户实体
@OneToMany(() => UserRoleEnitity, role => role.id)
role: UserRoleEnitity;
您不需要在 ManyToOne 和 OneToMany 关系中使用 JoinColumn()。
您可以在此处找到更多信息:
出现错误“无法读取未定义的属性(读取 'joinColumns')” 如何实现:用户只能分配一个对资源有权限的角色?
之前用过sequilize,typeorm我是newbee
user_roles table 实体:
@Entity({ name: 'user_roles' })
export class UserRoleEnitity extends DateAudit implements IUserRole {
@Column('varchar')
name: string;
@Column('varchar', {
nullable: true,
})
description?: string;
@Column('boolean', {
name: 'is_active',
default: false
})
isActive?: boolean;
@OneToMany(() => RolePermissionsEnitity, permission => permission.id)
permissions: IUserRolePermission[];
}
和用户实体:
@Entity({ name: 'users' })
export class UserEnitity extends DateAudit implements IUser {
@JoinColumn({ name: 'role_id' })
roleId: string;
@OneToMany(() => UserRoleEnitity, role => role.id)
role: UserRoleEnitity;
@Column('varchar', {
unique: true,
})
username: string;
@Column('varchar')
password: string;
@Column('varchar', {
nullable: true,
})
email?: string;
@Column('varchar', {
name: 'mobile_number',
nullable: true,
})
modileNumber?: string;
@Column('varchar', {
nullable: true,
})
name?: string;
@Column('varchar', {
nullable: true
})
position?: string;
@Column({
name: 'is_verified',
default: true
})
isVerified?: boolean;
@Column('timestamp', {
name: 'password_modified_at',
default: new Date()
})
passwordModifiedAt?: Date;
}
和role_permissions
@Entity({ name: 'user_role_permissions' })
export class RolePermissionsEnitity extends DateAudit implements IUserRolePermission {
@JoinColumn({ name: 'role_id' })
roleId: string;
@ManyToOne(() => UserRoleEnitity)
role: IUserRole;
@Column({
type: 'enum',
enum: Actions,
default: Actions.READ
})
action: Actions;
@JoinColumn({ name: 'resource_id' })
resourceId: string;
@ManyToOne(() => ResourceEntity, resource => resource.id)
resource: IResource;
}
当我这样查询存储库时:
const userEntity = await this._userRepository.findOne({
where: {
username,
},
relations: ['role']
});
您的父实体不应引用 ID,您应该与定义您的用户实体的字段有关系。 像这样:
用户角色实体
@OneToMany(() => RolePermissionsEnitity, permission => permission.role)
permissions: IUserRolePermission[];
用户实体
@OneToMany(() => UserRoleEnitity, role => role.id)
role: UserRoleEnitity;
您不需要在 ManyToOne 和 OneToMany 关系中使用 JoinColumn()。
您可以在此处找到更多信息: