반응형
원인
Prisma2는 CASCADE기능을 지원하지 않아서 발생하는 이슈 (2.26전버전들..)
대안법
1. 외부 라이브러리 이용 paljs (https://paljs.com/plugins/delete/)
model Post {
id Int @default(autoincrement()) @id
published Boolean @default(false)
title String
author User? @relation(fields: [authorId], references: [id])
authorId Int?
/// @onDelete(CASCADE)
comments Comment[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
스키마파일에 ///@onDelete(CASCADE) 구절 추가
relation속성을 갖는 필드에 명시
const resolvers = {
Query: {
deleteOneUser: async (_parent, { where }, { prisma }) => {
const prismaDelete = new PrismaDelete(prisma);
await prismaDelete.onDelete({ model: 'User', where });
return prisma.user.delete({
where,
...select,
});
},
},
};
해당 리졸버를 위와 같은 예시로 변경 (PrismaDelete 사용)
import { PrismaDelete } from "@paljs/plugins" 추가 필요
2. 삭제 전 연결되어 있는 데이터 삭제 (노가다)
예시)

해당 게시글에 대한 hashtags,likes,comments를 미리 Delete OR SETNULL 처리.
3. 스키마파일에 onDelete구문 추가
조건 - PrismaClient 2.26 (버전이 낮으면 previewFeatures = ["referentialActions"] 에대한 오류 발생 할 수도있음)
참고 - https://newreleases.io/project/github/prisma/prisma/release/2.26.0
prisma/prisma 2.26.0 on GitHub
New release prisma/prisma version 2.26.0 on GitHub.
newreleases.io
해당 링크는 2.26패치에 대한 Priview 페이지

스키마 파일에 previewFeatures에 대한 속성 기입

해당 필드에 onDelete, onUpdate 속성 추가 (자세한건 해당Priview 참고)
반응형
'Doing' 카테고리의 다른 글
[InstaClone] 지식 정리 (0) | 2021.05.29 |
---|