Wie frage ich die zugehörigen detaillierten Daten in typeORM ab?JavaScript

Javascript-Forum
Guest
 Wie frage ich die zugehörigen detaillierten Daten in typeORM ab?

Post by Guest »

Ich habe derzeit sechs Tabelleninstanzen: Modul, Codefunktion, Link, Kombination, Knoten und Kante.
Und es gibt die folgenden Beziehungen:

Code: Select all

module 1:1 combo
codefunc 1:1 node
link 1:1 edge
Image

Die DetailtypORM-Entitäten:

Code: Select all

@Entity()
@Unique(['path', 'moduleName'])
export class ComboModule {
@PrimaryGeneratedColumn()
id: number | undefined

// Combo
@OneToOne(type => Combo)
@JoinColumn()
combo: Combo | undefined;

@Column({
type: 'varchar',
})
path: string

@Column({
type: 'varchar',
})
moduleName: string

@Column({
type: 'text'
})
desc?: string

@ManyToOne(type => ComboModule)
parent?: ComboModule | null

@OneToMany(type => NodeCodeFunc, codeFunc => codeFunc.module)
codeFuncs: NodeCodeFunc[] | undefined

@Column({
default: false,
type: 'boolean'
})
isDeleted: boolean | undefined

@CreateDateColumn()
createDate?: Date

@UpdateDateColumn()
updateDate?: Date

constructor(moduleName: string = '', path: string, desc: string | undefined = '',  parent: ComboModule| null) {

this.moduleName = moduleName
this.desc = desc
this.path = path
this.parent = parent
}
}

@Entity()
export class EdgeCommonSupport {
@PrimaryGeneratedColumn()
id: number | undefined

// Combo
@OneToOne(type => Edge)
@JoinColumn()
edge: Edge | undefined;

@Column({
type: 'varchar',
default: 'support'
})
supportName: string | undefined

@Column({
type: 'text'
})
desc?: string

@Column({
default: false,
type: 'boolean'
})
isDeleted: boolean | undefined

@CreateDateColumn()
createDate?: Date

@UpdateDateColumn()
updateDate?: Date

constructor(supportName: string = '', desc: string | undefined = '' ) {
this.supportName = supportName
this.desc = desc
}
}

@Entity()
@Unique(['path', 'codefuncName'])
export class NodeCodeFunc {
@PrimaryGeneratedColumn()
id: number | undefined

// Combo
@OneToOne(type => Node)
@JoinColumn()
node: Node | undefined;

@Column({
type: 'varchar',
})
path: string | undefined

@Column({
type: 'varchar',
})
codefuncName: string

@Column({
type: 'text'
})
desc?: string

@ManyToOne(type => ComboModule, module => module.codeFuncs)
module: ComboModule | null

@Column({
default: false,
type: 'boolean'
})
isDeleted: boolean | undefined

@CreateDateColumn()
createDate?: Date

@UpdateDateColumn()
updateDate?: Date

constructor(path: string, codefuncName: string = '', desc: string | undefined = '', module: ComboModule | null) {

this.path = path
this.codefuncName = codefuncName
this.desc = desc
this.module = module
}
}

@Entity()
export class Node {
@PrimaryGeneratedColumn()
id: number | undefined

// ProjMod
@ManyToOne(type => ProjMod, projMod => projMod.Nodes)
projMod: ProjMod

@Column({
default: false,
type: 'boolean'
})
isDeleted: boolean | undefined

@CreateDateColumn()
createDate?: Date

@UpdateDateColumn()
updateDate?: Date

constructor(projMod: ProjMod) {
this.projMod = projMod
}
}

export const EdgeConnectType = {
NodeToNode: 'NodeToNode',
NodeToCombo: 'NodeToCombo',
ComboToCombo: 'ComboToCombo',
ComboToNode: 'ComboToNode'
}

@Entity()
export class Edge {
@PrimaryGeneratedColumn()
id: number | undefined

// ProjMod
@ManyToOne(type => ProjMod, projMod => projMod.Nodes)
projMod: ProjMod

@Column({
type: 'varchar',
nullable: true,
default: EdgeConnectType.NodeToNode
})
connecttype: string | undefined

// Node:source
@OneToOne(type => Node)
@JoinColumn()
NodeSource?: Node

// Node:target
@OneToOne(type => Node)
@JoinColumn()
NodeTarget?: Node

// Combo:source
@OneToOne(type =>  Combo)
@JoinColumn()
ComboSource?: Combo

// Combo:target
@OneToOne(type => Combo)
@JoinColumn()
ComboTarget?: Combo

@Column({
default: false,
type: 'boolean'
})
isDeleted: boolean | undefined

@CreateDateColumn()
createDate?: Date

@UpdateDateColumn()
updateDate?: Date

constructor(projMod: ProjMod) {
this.projMod = projMod
}
}

@Entity()
export class Combo {
@PrimaryGeneratedColumn()
id: number | undefined

// ProjMod
@ManyToOne(type => ProjMod, projMod => projMod.Nodes)
projMod: ProjMod

@Column({
default: false,
type: 'boolean'
})
isDeleted: boolean | undefined

@CreateDateColumn()
createDate?: Date

@UpdateDateColumn()
updateDate?: Date

constructor(projMod: ProjMod) {
this.projMod = projMod
}
}

Ich kann Modul (und seine Kombination) + Codefunktionen (und seinen Knoten) abfragen.
Zum Beispiel auf die folgende Weise (fein- Tuning kann erforderlich sein):

Code: Select all

export const ModulesWithCodefuncs = publicProcedure.input(z.object({
projModId: z.number()
})).query(async ({input: {projModId}}) => {

const modules = await dataBase.getRepository(ComboModule)
.createQueryBuilder('ComboModule')
.where("combo.projMod.isDeleted = :isDeleted", { isDeleted: false })
.andWhere("combo.projMod.id = :projModId", { projModId: projModId })
.leftJoinAndSelect('ComboModule.combo', 'combo')
.leftJoinAndSelect('ComboModule.codeFuncs', 'codeFuncs')
.getMany()

return modules
})
Aber jetzt möchte ich auch die zugehörigen Kanten abfragen (da es in anderen projMods auch viele Kanten Quelle/Ziel gibt). Wie soll ich es machen?

EDIT-01
Das tue ich nicht Ich habe eine Idee, wie man es über typeorm abfragt.
Das Einzige, was mir in den Sinn kommt, ist, alle Kanten und das hier abgefragte Modul + Codefunktion abzufragen und dann zu iterieren Die Kanten werden beurteilt, ob die Quelle/das Ziel der Kante zugehört module/codefunc, und behalten Sie es, falls vorhanden.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post