adonisJS / 조인테이블에서 상태관리 중 일괄변경 에러 (+더 나은 해결방법 추가)

flobeeee·2022년 2월 5일
0

시행착오

목록 보기
29/45
post-custom-banner

🍬 상황

다대다 관계인 테이블이 있어서 그 둘을 이어주는 조인테이블을 만들고,
상태를 업데이트했다.
1개의 데이터 상태를 바꿔줬는데, 여러개의 데이터 상태가 변경 됐다.

위처럼 비즈니스와 브랜드의 조인테이블(피벗테이블)에서
brand_id = 9, business_id = 1인 데이터의 connect_status를 inactive로 변경하는 api를 날리면, business_id가 1인 데이터가 모두 inactive가 되었다. 😒

pk를 brand_id, business_id 둘다 설정했는데, business_id가 먼저 설정되어있어서 해당 데이터 기준으로 다 바뀌는건가 가설을 세워봤다.


🍬 해결방법

  1. 공식문서 뒤져보기 -> 관련내용을 찾을 수 없었다. (보통 조인테이블에서 상태관리를 안해서 그런건가 ?)

  2. raw query를 사용해서 넣기 -> mysql로 직접 데이터를 업데이트 하니까 문제가 없었다. adonisJS 의 문제라고 생각해서 로우쿼리로 직접 데이터베이스를 업데이트 하면 될 것이라고 생각했다. 하지만 3번이 더 깔끔하고 나은 방법이라고 생각해서 3번을 적용했다.

  3. 조인테이블에 id 추가하기 -> pk가 2개라서 에러가 나는거라고 생각했기 때문에 id를 추가해 pk를 하나만 설정했다. 잘 작동했다.

  1. 쿼리를 쪼개서 날리지 말고 조회한걸 바로 삭제한다. (22.05.18 업데이트)
예시
// 기존 작성한 코드 => 여러개 삭제
const joinData = await Join.find(1)
await joinData.delete()

// 해결 코드 => 의도한 데이터만 삭제
await Join.find(1).delete()

팀원들이 말하길 pk가 여러개 걸려있는 테이블의 경우, ORM이 제대로 작동하지 않는다고 한다.

profile
기록하는 백엔드 개발자
post-custom-banner

0개의 댓글