如何删除有关系的项目?

时间:2019-10-10 12:13:21

标签: graphql photon prisma prisma-graphql nexus-prisma

我正在使用pyramida2,但我不知道如何删除与其他模型有关系的项目。

这是我的模特。

model User {
  id       String @default(cuid()) @id
  email    String @unique
  password String
  name     String

  teams       Team[]
  memberships Membership[]
}

model Team {
  id        String   @default(cuid()) @id

  name        String
  founder     User?
  memberships Membership[]
}

model Membership {
  id        String   @default(cuid()) @id

  class    String

  owner User
  team  Team
}

用户团队是1:n关系。 团队成员关系是1:n关系。

我想删除一个团队。

我已经尝试过了。

t.list.field("deleteTeam", {
  type: "Team",
  args: {
    teamid: idArg()
  },
  resolve: (_, { teamid }, ctx) => {
    return ctx.photon.teams.deleteMany({
      where: { id: teamid }
    });
  }
});

但是它不起作用,因为它违反了关系。

如何删除同时断开所有关系的团队?

1 个答案:

答案 0 :(得分:1)

具有依赖关系的删除通常要求指定级联删除。

根据您的模型,我认为您需要更新自己的graphql模式,以处理CASCADE上的SET_NULL与关系onDelete上的force: Boolean

我知道在8base之类的其他系统中,可以指定一个Disconnecting: Encountered END_OF_STREAM标志来解决此问题。但是,这里是您的问题的Prisma文档部分:https://prisma-docs.netlify.com/docs/1.4/reference/prisma-api/concepts-utee3eiquo/#cascading-deletes