반응형
원인
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
해당 링크는 2.26패치에 대한 Priview 페이지
스키마 파일에 previewFeatures에 대한 속성 기입
해당 필드에 onDelete, onUpdate 속성 추가 (자세한건 해당Priview 참고)
반응형
'Doing' 카테고리의 다른 글
[InstaClone] 지식 정리 (0) | 2021.05.29 |
---|