본문 바로가기

기록/TIL

2023.09.12 supabase inner join

supabase를 사용중이다. join을 통해 여러 테이블에서 데이터를 가지고 오고 싶었는데, 기존의 join은 어째서인지.. 불가능한 부분이 있었다.
 
supabase의 공식 문서를 보면 아래와 같이 작성했을 때 inner join이 가능하다고 나와있지만 실제로 시도 해 보니 parse 에러가 발생했다. 날 속였어! 

const getPost = async (id: string) => {
  const { data } = await supabase
    .from('posts')
    .select(
    	// userId로 join하기 위해 users테이블 내부에 inventory 테이블을 넣어준다.
      '*,users(nickname,profile_img_url,inventory(id,items(name,img_url,category)))',
    )
    .eq('id', id)
    // posts 테이블과 연결된 users 테이블과 연결된 inventory 테이블에서 조건을 준다.
    .eq('users.inventory.is_equipped', true)
    .single();
  return data;
};

 
우선은 db요청을 두번 하는걸로 타협하고, 몇일 뒤에 다시 시도하게 되었다.
 


 
다시 겁나게 Docs와 검색을 하며 수정했지만, 작동하지 않아서 결국 신버전(V2)이 기본으로 세팅되어 있어서 찾아보지 않았던 구버전(V1)의 함수로 시도 해 보기로 했다.

const getPost = async (id: string) => {
  const { data } = await supabase
    .from('posts')
    .select(
      '*,users!inner(nickname,profile_img_url,inventory(id,items(name,img_url,category)))',
    )
    .eq('id', id)
    .eq('users.inventory.is_equipped', true)
    .single();
  return data;
};

 
바로 작동했다. 신버전의 메서드로는 안되던 join이 구버전 메서드로 작동하다니 너무 열받았지만 그래도 된게 너무 기뻤다! 어쨋든 join도 해결되었으니 db 요청을 두번하던 일이 줄게 되었다. 신난다!

'기록 > TIL' 카테고리의 다른 글

2023.09.15 useMemo로 최적화 해보기  (0) 2023.09.15
2023.09.13  (0) 2023.09.13
2023.09.11  (0) 2023.09.11
2023.09.08 모달 z-index가 안먹힌다?  (0) 2023.09.08
2023.09.04  (0) 2023.09.04