Nestjs TypeForm是否支持自动级联删除?

Nestjs TypeForm是否支持自动级联删除?,nestjs,one-to-many,typeorm,Nestjs,One To Many,Typeorm,这不是一个具体的编码问题——更多的是一个一般性问题。我在文档中找不到答案 假设我们有一个名为Invoice的实体,它包含许多LineItem实体,我使用manytone()和OneToMany()进行了设置,如文档所述。此外,我们确保在OneToMany()装饰器选项中包含cascade:true 现在,让我们创建一个包含2个LineItems的Invoice对象。如果我保存这张发票,TypeORM会正确地级联并自动将它们保存到数据库中——一切都很顺利;我只需要一行代码就可以将3行保存到数据库中

这不是一个具体的编码问题——更多的是一个一般性问题。我在文档中找不到答案

假设我们有一个名为Invoice的实体,它包含许多LineItem实体,我使用
manytone()
OneToMany()
进行了设置,如文档所述。此外,我们确保在
OneToMany()
装饰器选项中包含
cascade:true

现在,让我们创建一个包含2个LineItems的Invoice对象。如果我保存这张发票,TypeORM会正确地级联并自动将它们保存到数据库中——一切都很顺利;我只需要一行代码就可以将3行保存到数据库中

现在,假设我从数组中删除其中一个行项目并重新保存发票。在这种情况下,TypeORM抛出的错误如下所示:

QueryFailedError: ER_BAD_NULL_ERROR: Column 'invoice_line_item_id' cannot be null
这个错误对我来说很清楚:我假设TypeORM理解这个行项目不再与发票关联,但它不是删除行项目(这是我希望TypeORM做的),而是尝试更新行并将外键
发票行项目id
设置为
null
。当然,这个外键不可为空,所以mysql会抱怨

如何让TypeForm删除这一行?是否必须使用
repository.remove()
手动删除子项?是否需要删除isNullable:false?(不理想)


谢谢

来自
关系选项.d.ts
的字体:

  • 设置给定关系的级联选项
  • 如果设置为true,则表示可以在数据库中插入或更新相关对象
因此,我相信您可以为您的装饰器添加一个附加选项,如
onDelete:“CASCADE”
,它将解决您的问题。例如:

@ManyToOne(data => data, { cascade: true, onDelete: 'CASCADE' })

不幸的是,这是我尝试的第一件事之一——当出现相同的错误消息时,它似乎没有起到任何作用。事实上,github已经解决了这个问题,但它仍在等待他们的一名团队成员的审查:(我真的希望他们能够解决这个问题。考虑到这些删除决定在我的实体图中有多深,在几十个点手动编写此删除代码将是一件痛苦的事情