prisma 키가 여러개인 테이블에서의 where (+transaction)

김초록·2021년 2월 26일
0

키가 여러개 설정돼어있는 경우의 테이블에서 삭제를 해야함

보통 이런식으로 작성했는데

where: {
menu_id: id,
},

키가 여러개라서 쓰는 방식이 좀 다른거같음

await prisma.menu_function_info.update({
            data: {
                menu_func_nm,
            },
            //model 이 @@id([menu_id, menu_func_id])인 경우 where 사용법
            where: {
                menu_id_menu_func_id: {
                    menu_id: id,
                    menu_func_id,
                },
            },
        });

prisma.schema 파일

model menu_function_info {
  menu_func_id       String               @db.VarChar(20)
  menu_id            String               @db.VarChar(20)
  menu_func_nm       String?              @db.VarChar(50)
  menu_func_class_id String?              @db.VarChar(10)
  menu_info          menu_info            @relation(fields: [menu_id], references: [menu_id])
  role_menu_func_map role_menu_func_map[]

  @@id([menu_id, menu_func_id])
}
  • 그리고 두 테이블에서 동시 삭제하기위해 transaction 을 사용했는데 먼저 삭제돼는 테이블, 그 다음 삭제돼는 테이블로 순서를 맞춰서 배열에 넣어줘야 정상작동함...ㅠㅠ
//메뉴기능 삭제 시 role_menu_func_map 매핑정보도 삭제
        const deleteRoleFunc = prisma.role_menu_func_map.delete({
            where: {
                menu_func_id_menu_id: {
                    menu_func_id: funcId,
                    menu_id: menuId,
                },
            },
        });

        const deleteFunc = prisma.menu_function_info.delete({
            where: {
                menu_id_menu_func_id: {
                    menu_id: menuId,
                    menu_func_id: funcId,
                },
            },
        });

        const transaction = await prisma.$transaction([deleteRoleFunc, deleteFunc]);
profile
개발 몰라몰라

0개의 댓글