我想在 TypeORM 实体中创建这个设计:
这个想法是列表可以包含任意数量、任意类型的项目。现在有两种类型的项目:待办事项和雇用。未来可能还会有更多。
这些是列表、待办事项和雇用实体:
@Entity()
export class List {
@PrimaryGeneratedColumn()
id: number
@OneToMany(() => Item, (item) => item.list)
items: Item[]
@Column({
length: 60,
})
title: string
}
@Entity()
export class Todo {
@PrimaryGeneratedColumn()
id: number
@OneToOne(() => Item)
item: Item
@Column({
length: 60,
})
title: string
@Column('text')
description: string
@Column({ default: false })
done: boolean
}
@Entity()
export class Hire {
@PrimaryGeneratedColumn()
id: number
@OneToOne(() => Item)
item: Item
@Column({
length: 60,
})
title: string
@Column('datetime')
startDate: string
@Column('datetime')
endDate: string
}
在映射表中,如何让TypeORM知道
entityId
可以是什么类型?
@Entity()
export class Item {
@PrimaryGeneratedColumn()
id: number
@ManyToOne(() => List, (list) => list.items)
@JoinColumn()
list: List
@Column()
entityType: string
@OneToOne(() => Todo /* Todo OR Hire */, (itemType) => itemType.item)
entity: Todo // Todo OR Hire
}
可以通过做一些不同的事情来规避整个问题吗?
我可能会遗漏细节,但我想知道它是否不适用于继承,根据您描述问题的方式:
列表
@Entity()
export class List {
@PrimaryGeneratedColumn()
id: number
@OneToMany(() => Item, (item) => item.list)
items: Item[]
@Column({
length: 60,
})
title: string
}
项目
@Entity()
export abstract class Item {
@PrimaryGeneratedColumn()
id: number
@ManyToOne(() => List, (list) => list.items)
@JoinColumn()
list: List
@Column()
entityType: string
}
都都
@Entity()
export class Todo extends Item {
@PrimaryGeneratedColumn()
id: number
@Column({
length: 60,
})
title: string
@Column('text')
description: string
@Column({ default: false })
done: boolean
}
雇用
@Entity()
export class Hire extends Item {
@PrimaryGeneratedColumn()
id: number
@Column({
length: 60,
})
title: string
@Column('datetime')
startDate: string
@Column('datetime')
endDate: string
}