typescript - ความสัมพันธ์กับลูกหลายของการสืบทอดตารางเดียวใน NestJS
สรุปสั้น ๆ:
ฉันต้องการสร้างความสัมพันธ์แบบเดี่ยวกับหลายเอนทิตีที่สืบทอดจากตารางเดียวกัน ในการทำเช่นนั้น ฉันจำเป็นต้องระบุเอนทิตีที่เกี่ยวข้องกับความสัมพันธ์ และฉันต้องการระบุมากกว่าหนึ่งเอนทิตี ดูเหมือนว่าความสัมพันธ์กับหลายประเภทจะไม่สามารถทำได้ แม้ว่าประเภทที่ระบุจะสืบทอดจากตารางเดียวกันก็ตาม มันสามารถทำได้หรือไม่ และถ้าได้ ฉันทำอะไรผิดไป?
คำอธิบายเต็ม:
ฉันมีเอนทิตี Task เป็นเอนทิตีพื้นฐาน สำหรับวัตถุประสงค์ของคำถามนี้ ฉันจะลบคอลัมน์ที่ไม่จำเป็นส่วนใหญ่เพื่อให้ง่ายต่อการติดตาม
import { Column, Entity, TableInheritance } from 'typeorm';
@Entity('tasks')
@TableInheritance({ column: { type: 'varchar', name: 'type' } })
export class Task {
@PrimaryGeneratedColumn({ type: 'bigint' })
id: string;
@Column({ length: 255 })
name: string;
}
และฉันมีเอนทิตี TaskCollection และ SpecialTask ที่สืบทอดเอนทิตี Task ฉันต้องการให้มีความสัมพันธ์แบบพ่อ-ลูกระหว่างพวกมันเพื่อให้เฉพาะเอนทิตีประเภท TaskCollection เท่านั้นที่สามารถมีลูกได้ นั่นคือ TaskCollection สามารถมีลูกได้ทั้งประเภท TaskCollection และ SpecialTask
รหัสเอนทิตี TaskCollection:
import { Type } from 'class-transformer';
import { ChildEntity, ManyToOne, OneToMany } from 'typeorm';
@ChildEntity('task_collections')
export class TaskCollection extends Task {
@ManyToOne(
() => TaskCollection,
tc => tc.childTasks,
{
onDelete: 'CASCADE',
},
)
@Type(() => TaskCollection)
parentTask: TaskCollection;
@OneToMany(
() => TaskCollection | SpecificTask,
t => t.parentTask,
)
@Type(() => TaskCollection | SpecificTask)
childTasks: (TaskCollection | SpecificTask)[];
}
รหัสเอนทิตี SpecificTask:
import { Type } from 'class-transformer';
import { ChildEntity, Column, ManyToOne, OneToMany } from 'typeorm';
@ChildEntity('specific_tasks')
export class SpecificTask extends Task {
@ManyToOne(
() => TaskCollection,
tc => tc.childTasks,
{
onDelete: 'CASCADE',
},
)
@Type(() => TaskCollection)
parentTask: TaskCollection;
}
ปัญหาที่ปรากฏขึ้นเมื่อฉันลองทำสิ่งนี้
ฉันอยากหลีกเลี่ยงการเปลี่ยนแปลงเอนทิตี Task เพราะฉันมีเอนทิตีอื่น ๆ ที่ไม่ได้เชื่อมโยงกับความสัมพันธ์นี้ แต่ฉันก็ไม่รู้ด้วยซ้ำว่ามันเป็นไปได้หรือไม่ที่จะทำแบบนี้
มีข้อเสนอแนะเกี่ยวกับวิธีที่สามารถทำสิ่งนี้ได้หรือไม่?