当我尝试删除与其他表有关系的任何公司时,我正在使用 PostgreSQL 和 GraphQL。它显示 GraphQL 错误:

Posted

技术标签:

【中文标题】当我尝试删除与其他表有关系的任何公司时,我正在使用 PostgreSQL 和 GraphQL。它显示 GraphQL 错误:【英文标题】:I am using PostgreSQL with GraphQL when I try to delete any company that has relation with other tables. it shows GraphQL error: 【发布时间】:2020-06-16 21:27:52 【问题描述】:

表格架构

type Company 
  id: ID! @unique
  name: String!
  users: [CompanyUser!]! @relation(name: "CompanyUserToCompany")
  areas: [Area!]! @relation(name: "Company_areas")
  positions: [Position!]! @relation(name: "Company_positions", onDelete: CASCADE)



type Position 
  id: ID! @unique
  name: String!
  users: [CompanyUser!]! @relation(name: "Position_company_user")
  company: Company! @relation(name: "Position_company", onDelete: CASCADE)



显示此 GraphQL 错误

错误:GraphQL 错误:您尝试进行的更改将违反 Company 和 Position 之间所需的关系“Position_company”

【问题讨论】:

【参考方案1】:

如果您使用的是 prisma2,我想我的回答可以帮助您。

不要按公司删除项目。 (例如:prisma.company.delete(where: ~ )

按位置删除项目。 (例如prisma.position.delete(where:company:id:companyId)

如果更改字段属性不起作用并且可以,则将公司字段设为可为空(不需要)。然后,先删除公司,再删除职位(因为我猜你想要级联,对吧?)

别忘了使用 await!

我以这种方式解决了这个问题。但我不确定onDelete:CASCADE 的情况。 我真的希望 prisma2 尽快发布级联..!

【讨论】:

以上是关于当我尝试删除与其他表有关系的任何公司时,我正在使用 PostgreSQL 和 GraphQL。它显示 GraphQL 错误:的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - whereHas() 中关系的最新记录

使用Backand BaaS时如何创建有关系的对象?

Laravel eloquent 从不一定有关系的表关系中将数据从大到小排序

SWIFT - Coredata删除关系记录

Spark SQL表分区找不到文件

CrudRepository 不会删除有关系的对象