Как запросить соответствующие подробные данные в typeORM?Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Как запросить соответствующие подробные данные в typeORM?

Сообщение Anonymous »

Сейчас у меня есть шесть экземпляров таблиц: модуль, codefunc, ссылка, комбинация, узел и край.
И есть следующие отношения:

Код: Выделить всё

module 1:1 combo
codefunc 1:1 node
link 1:1 edge
Изображение

Подробные сведения о типах объектов ORM:

Код: Выделить всё

@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
}
}

Я могу запросить модуль (и его комбинацию) + codefuncs (и его узел).
Например, следующим образом (тонко- может потребоваться настройка):

Код: Выделить всё

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
})
Но теперь я также хочу запросить связанные ребра (потому что в других projMod также есть много исходных/целевых ребер). Как мне это сделать?

EDIT-01
Я не знаю есть какие-либо идеи о том, как запросить его через typeorm.
Единственное, что приходит мне на ум, это запросить все ребра и модуль + codefunc, запрошенный здесь, а затем перебрать ребра, определяя, принадлежит ли источник/цель ребра модуль/codefunc и сохраните его, если он существует.

Подробнее здесь: https://stackoverflow.com/questions/793 ... in-typeorm
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»