TypeORM批量插入?

Jak*_*nár 5 bulkinsert backend mariadb express typeorm

我如何在 1 个查询中批量插入多条记录,以便我的数据库高效 我想创建 Office 并将多个新设备插入该办公室。表/型号代码:

办公室

@Entity({ name: 'offices' })
export class Office extends Timestamps {

    @OneToMany(() => Equipment, (equipment: Equipment) => equipment.office, {
        onDelete: 'CASCADE',
        onUpdate: 'CASCADE'
    })
    equipment: Array<Equipment>;
}
Run Code Online (Sandbox Code Playgroud)

设备

@Entity({ name: 'equipment' })
export class Equipment extends Timestamps {
    @Column({
        name: 'equipment_id',
        type: 'int',
        nullable: false,
        width: 2,
        default: 0
    })
    equipment_id: number;

    @ManyToOne(() => Office, (office: Office) => office.equipment)
    @JoinColumn({ name: 'office_id' })
    office: Office;
}

Run Code Online (Sandbox Code Playgroud)

Pur*_*ani 4

我建议您在关系中使用级联属性:

@Entity({ name: 'offices' })
export class Office extends Timestamps {

    @OneToMany(() => Equipment, (equipment: Equipment) => equipment.office, {
        cascade: true, // <= here
        onDelete: 'CASCADE',
        onUpdate: 'CASCADE'
    })
    equipment: Array<Equipment>;
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您在创建 Office 实例时设置设备,它会自动将设备实例插入数据库:

await Office.create({equipment: ['whatever']}).save();
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用基于此链接的数据映射器方法和存储库:

const officeRepository = connection.getRepository(Office);
const office = new Office();
const equipment1 = new Equipment(); // and set your properties or make more instances

office.equipment = [equipment1]; // or more instances
await officeRepository.save(office);
Run Code Online (Sandbox Code Playgroud)