如何删除prisma中包含所有相关记录的记录

如何删除prisma中包含所有相关记录的记录,prisma,Prisma,我知道我的问题与以下章节有关: 但是,我不明白如何在(JavaScript)prisma客户端中删除一条记录及其所有相关记录 例如,my是这样的: type Board { id: ID! @unique createdAt: DateTime! updatedAt: DateTime! owner: User! @relation(name: "BoardOwnershipRelation") title: String! description: String

我知道我的问题与以下章节有关:

但是,我不明白如何在(JavaScript)prisma客户端中删除一条记录及其所有相关记录

例如,my是这样的:

type Board {
  id: ID! @unique
  createdAt: DateTime!
  updatedAt: DateTime!
  owner: User! @relation(name: "BoardOwnershipRelation")
  title: String!
  description: String
  taskGroups: [TaskGroup!]!
}

type TaskGroup {
  id: ID! @unique
  createdAt: DateTime!
  updatedAt: DateTime!
  owner: User! @relation(name: "TaskGroupOwnershipRelation")
  board: Board!
  title: String!
  description: String
  precedence: Int
  tasks: [Task!]!
}

type Task {
  id: ID! @unique
  createdAt: DateTime!
  updatedAt: DateTime!
  owner: User! @relation(name: "TaskOwnershipRelation")
  taskGroup: TaskGroup!
  title: String!
  description: String
  dueDate: DateTime
  precedence: Int
  items: [TaskItem!]!
  assignedTo: [User!]! @relation(name: "AssignmentRelation")
}

type TaskItem {
  id: ID! @unique
  createdAt: DateTime!
  updatedAt: DateTime!
  owner: User! @relation(name: "TaskItemOwnershipRelation")
  task: Task!
  title: String!
  description: String
  checked: Boolean!
  precedence: Int
}
如何删除包含所有相关任务组、任务和任务项的董事会

编辑

我最近尝试了这个解决方案,效果也不错

// e.g. this is in my GraphQL resolvers async function...

await prisma.deleteManyTaskItems({
  task: {
    taskGroup: {
      board: {
        id: boardId
      }
    }
  }
});

await prisma.deleteManyTasks({
  taskGroup: {
    board: {
      id: boardId
    }
  }
});

await prisma.deleteManyTaskGroups({
  board: {
    id: boardId
  }
});

return await prisma.deleteBoard({ id: boardId });
但是,对于我的问题有更好的解决方案吗?

您可以使用@relation指令的“onDelete”参数来指定删除实体()

您只需更改数据模型,如下所示:

type Board {
  id: ID! @unique
  createdAt: DateTime!
  updatedAt: DateTime!
  owner: User! @relation(name: "BoardOwnershipRelation")
  title: String!
  description: String
  taskGroups: [TaskGroup!]! @relation(name: "BoardTaskGroups" onDelete: CASCADE)
}

type TaskGroup {
  id: ID! @unique
  createdAt: DateTime!
  updatedAt: DateTime!
  owner: User! @relation(name: "TaskGroupOwnershipRelation")
  board: Board! @relation(name: "BoardTaskGroups")
  title: String!
  description: String
  precedence: Int
  tasks: [Task!]! @relation(name: "TaskGroupsTask" onDelete: CASCADE)
}

type Task {
  id: ID! @unique
  createdAt: DateTime!
  updatedAt: DateTime!
  owner: User! @relation(name: "TaskOwnershipRelation")
  taskGroup: TaskGroup! @relation(name: "TaskGroupsTask")
  title: String!
  description: String
  dueDate: DateTime
  precedence: Int
  items: [TaskItem!]! @relation(name: "TaskTaskItem" onDelete: CASCADE)
  assignedTo: [User!]! @relation(name: "AssignmentRelation")
}

type TaskItem {
  id: ID! @unique
  createdAt: DateTime!
  updatedAt: DateTime!
  owner: User! @relation(name: "TaskItemOwnershipRelation")
  task: Task! @relation(name: "TaskTaskItem")
  title: String!
  description: String
  checked: Boolean!
  precedence: Int
}
然后删除你的董事会。所有其他删除将由Prisma完成