본문 바로가기

Doing

[Prisma]relation 대한 onDelete 대안법

반응형

원인 

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 페이지

https://newreleases.io/project/github/prisma/prisma/release/2.26.0

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

https://newreleases.io/project/github/prisma/prisma/release/2.26.0

해당 필드에 onDelete, onUpdate 속성 추가 (자세한건 해당Priview 참고)

 
반응형

'Doing' 카테고리의 다른 글

[InstaClone] 지식 정리  (0) 2021.05.29