【问题标题】:How should i make mapping table relationship logic in the nestjs typeorm?我应该如何在nestjs typeorm中制作映射表关系逻辑?
【发布时间】:2022-01-03 04:55:12
【问题描述】:

我之所以写,是因为我在处理映射表时有一个问题。在网页上创建用户时,我想把现有的信息和数据称为设备。每个用户可以从多个设备入手,所以他们创建了一个像图片一样的映射表来解决 N:M 关系。

但是,要想把数据放到typeorm的映射表中,必须先创建一个user对象和一个item对象。在将循环设置为用户设置的设备数量以查找从网络接收到的设备编号后,我们正在创建一个设备对象并将其插入到映射表中。

有没有比我现在做的更好的方法?

        await Promise.all(
            items.map(async (element) => {
                const uItem = new UserItem();
                uItem.item = element.item;
                uItem.user = user;
                uItem.period = element.period;
                await transactionManager.save(uItem);
            })
        );

【问题讨论】:

    标签: nestjs typeorm


    【解决方案1】:

    typeORM 有一个简单的解决方案 所以你像这样定义你的 2 个主要实体

    @Entity()
    export class Item{
      @PrimaryGeneratedColumn('uuid')
      id: string; // or whatever you like
    
      @OneToMany(() => UserItems, userItem => userItem.item, {
        nullable: true,
        cascade: true,
      })
      userItems: UserItem[];
    ...
    
    @Entity()
    export class User{
      @PrimaryGeneratedColumn('uuid')
      id: string; // or whatever you like
    
      @OneToMany(() => UserItems, userItem => userItem.user, {
        nullable: true,
        cascade: true,
      })
      userItems: UserItem[];
    ...
    

    你的映射类如下:

    @Entity()
    export class UserItem{
      @PrimaryGeneratedColumn('uuid')
      id: string; // or whatever you like
    
      @ManyToOne(() => User, {
        onDelete: 'CASCADE', // decide on delete logic
      })
      user: User;
    
      @ManyToOne(() => Item, {
        onDelete: 'CASCADE', // decide on delete logic
      })
      item: Item;
    ...
    

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 2020-03-21
      • 2021-03-06
      • 2014-10-13
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      相关资源
      最近更新 更多