www.prisma.io/docs/getting-started/setup-prisma/start-from-scratch-sql-node-mysql
Prisma2를 배우면서 위에 사이트에서 보면서 따라하는 것을 해보았다.
하는 도중에 막히는 부분이 있어서 글로 남겨본다.
거의 막바지에 delete를 하는 부분이 있었는데 아래 에러가 발생하였다.
해석해보니 user와 post 테이블 둘의 관계가 있어 그에 대한 위반을 하고 있기 때문에
삭제가 안된다는 의미였다..
(여기서부터 오늘 하루를 다 보냈다.)
위에 사이트에서 하는 고대로 따라했지만,
제약을 위반했다고 하여 prisma 메소드인 delete 로는 불가능한 걸 깨달았다.
그래서 공식문서에서 더 찾아봤더니 Cascading deletes (MySQL) 를 발견했다.
하지만 저 방법으로도 되지 않았다.
(복잡하기도 하고 뭔가 다른 방법이 있을 것 같았다.)
두 번째 방법은 prisma2에서 SQL 문법을 그대로 사용할 수 있다는 걸 알게 되어,
한번 해보았다. 공식문서참고주소
아까와는 다른 에러긴 하지만..
구글링해서 해석해본 결과 내용은 비슷하단걸 깨달았다.
도저히 혼자의 힘으로 해결이 불가능 할 것 같다는 생각으로 처음으로
구글번역을 통한 GitHub에 도움을 요청하였다...
답변이 오면 한번 따라해보고, 그 전까지는 한번 공식 문서를 더 찾아봐야겠다..
아무래도 prisma2가 beta버전이기 때문에 많은 기능들을 지원하지 않는 것 같다. (추측)
혹시..해결 법 아시면 댓글남겨주시면 감사합니다...(__)
Prisma 공식 Github에 질문을 올렸더니 빠른 시간 안에 친절한 답변을 해주셨습니다.
영어도 못해서 구글번역기로 돌려서 올렸지만.. 어떻게 소통이 되었는지 정확한 답변을 받았습니다.
일단 db테이블을 만들 때 따로 추가해주어야하는 방식이 있었습니다.
create table `User` (
`id` int auto_increment primary key,
`name` varchar(256)
);
create table `Post` (
`id` int auto_increment primary key,
`title` varchar(256),
`author_id` int,
constraint `author_fk` foreign key (`author_id`) references `User`(`id`) on delete cascade
);
create table `Profile` (
`id` int auto_increment primary key,
`userId` int unique,
constraint `profile_fk` foreign key (`userId`) references `User`(`id`) on delete cascade
);
위에 보시면 연결한 테이블 제약 뒤에 'on delete cascade' 를 넣었습니다.
그 후
- npx prisma introspect
- npx prisma generate
위 두 명령어를 통해 schema 파일을 업데이트 하고,
prisma/client도 업데이트를 해주었습니다.
다시 똑같이 해보면.. 결과는!!
정상적으로 삭제가 되었습니다!!
prisma를 배우면서 점점 다른 것들에 비해 더욱 간편하단 것을 몸소 느끼고 있는 반면,
현재 계속 빠른 속도로 업데이트 및 beta버전인 관계로 공식문서도 금세 구버전(?)이 되는 것 같습니다.
또한 다른 것들에 비해 사람들의 후기 및 블로그 정보들이 부족하여 찾기가 꽤 어려웠습니다..
그래도 다행인건 오픈소스라 github에 물어볼 수 있었다는게 좋았습니다.
물어보면서 계속 구글번역하는 저를 보면서.. 영어를 진짜 꾸준히 공부해서
해석 및 소통이 되었으면 좋겠단 생각을 했습니다..!
'JavaScript > NodeJs' 카테고리의 다른 글
express.use 메소드 (0) | 2020.09.19 |
---|---|
[GraphQL] Over-fetching과 Under-fetching? (0) | 2020.08.27 |