Вложенные записи в таблице с MySQL + TypeORM - PullRequest
0 голосов
/ 28 апреля 2020

Я использую TypeORM в своем проекте Node + React + MySQL для управления сущностями.

Мне нужно вставить повторяющиеся записи в таблицы, имеющие отношение родитель-потомок.

Отношение иерархия выглядит следующим образом:

Таблица A

Таблица B (дочерний элемент A)

Таблица C (дочерний элемент B),

Кроме того, Таблица C имеет отношения родитель-потомок с самим собой.


Структура сущностей выглядит следующим образом:

Таблица A

@PrimaryGeneratedColumn({
    type: 'int',
    unsigned: true,
    name: 'id',
})
id: number;

@Column('varchar', {
    nullable: false,
    length: 250,
    name: 'title',
})
title: string;

@OneToMany(() => B, (b: B) => b.a, {
        onDelete: 'CASCADE' ,
        onUpdate: 'CASCADE',
    })
bs: B[];

Таблица B

@PrimaryGeneratedColumn({
    type: 'int',
    unsigned: true,
    name: 'id',
})
id: number;

@ManyToOne(() => A, (a: A) => a.bs,
    {  nullable: false, onDelete: 'CASCADE', onUpdate: 'CASCADE' })
@JoinColumn({ name: 'a_id'})
a: A | null;

@OneToMany(() => C, (c: C) => c.b, {
    onDelete: 'CASCADE',
    onUpdate: 'CASCADE',
})
cs: C[];

Таблица C

@PrimaryGeneratedColumn({
    type: 'int',
    unsigned: true,
    name: 'id',
})
id: number;

@ManyToOne(() => B, (b: B) => b.cs,
    {  nullable: true, onDelete: 'CASCADE', onUpdate: 'CASCADE' })
@JoinColumn({ name: 'b_id'})
b: B | null;

@ManyToOne(() => C, (c: C) => c.cs,
    {  nullable: true, onDelete: 'CASCADE', onUpdate: 'CASCADE' })
@JoinColumn({ name: 'parent_id'})
parent: C | null;

@OneToMany(() => C, (c: C) => c.parent, {
    onDelete: 'CASCADE',
    onUpdate: 'CASCADE',
})
cs: C[];

Итак, вот задача, которую я должен чтобы сделать ... Мне нужно дублировать некоторые записи Table B (& записи в дочерней таблице C также должны дублироваться с новым сгенерированным b_id), у меня будет массив b_id.

Также обратите внимание, что Table C имеет отношения ManyToOne и OneToMany с самим собой.

Я могу сделать это с количеством циклов, но должен быть какой-то способ использовать se отношения между таблицами.

Итак, как я могу дублировать записи, используя TypeORM?

Заранее спасибо .....

...