如何在 Nest.js 中删除 @ManyToMany 关系中的数据

Posted

技术标签:

【中文标题】如何在 Nest.js 中删除 @ManyToMany 关系中的数据【英文标题】:How to delete data in @ManyToMany relation in Nest.js 【发布时间】:2020-06-29 23:55:03 【问题描述】:

我在两个实体之间有一个ManyToMany 关系

@Entity()
export class Device

  @PrimaryColumn()
  Name:string;


  @Column( nullable: true)
  Port:number;

  @Column( nullable: true)
  IPadress:string;

  @Column( nullable: true)
  Location:string;

  @ManyToMany(type => User)
    @JoinTable()
    users: User[];

  

@Entity()
export class User

  @PrimaryColumn()
  Id:number;
  @Column( nullable: true)
  Departement:string;
  @Column( nullable: true)
  FirstName:string;
  @Column( nullable: true)
  LastName:string;
  @Column( nullable: true)
  CardNumber:string;
  @Column( nullable: true)
  MobilePhone:string;


我想知道如何删除带有用户的设备,以及如何仅从设备中删除用户

【问题讨论】:

【参考方案1】:

我认为使您的实体关系双向应该有效:

@Entity()
export class Device

  @PrimaryColumn()
  Name:string;    

  @Column( nullable: true)
  Port:number;

  @Column( nullable: true)
  IPadress:string;

  @Column( nullable: true)
  Location:string;

  @ManyToMany(type => User, users => users.devices  cascade: true )
    @JoinTable()
    users: User[];

  

@Entity()
export class User

  @PrimaryColumn()
  Id:number;
  @Column( nullable: true)
  Departement:string;
  @Column( nullable: true)
  FirstName:string;
  @Column( nullable: true)
  LastName:string;
  @Column( nullable: true)
  CardNumber:string;
  @Column( nullable: true)
  MobilePhone:string;
  @ManyToMany(type => Device, device => device.users)        
    devices: Device[];

我想您已经设置了数据源,因此您可以通过以下方式仅删除用户:

db.getRepository(User).delete(userId);

当你删除一台设备时,它会删除他所有的关联用户:

db.getRepository(Device).delete(deviceId);

【讨论】:

谢谢,这救了我

以上是关于如何在 Nest.js 中删除 @ManyToMany 关系中的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Nest.js 中提供静态 HTML 文件?

如何在 Nest.js 中参考打字稿源打印堆栈跟踪

如何在单元测试 Nest.js 中测试抛出新的 HttpException

无论如何在 Nest.js 中使用 Fastify 获取请求、响应的类型接口

如何在 nest.js 中重命名 JSON 字段

在 Nest.JS 中将服务注入警卫