Supabase 쓰던 중 의문점 및 해소 기록

이승훈·2025년 7월 10일
0

시행착오

목록 보기
27/28
     const { data, error } = await supabase
        .from("hospital_table_column_config")
        .select("columns")
        .eq("hospital_id", hospitalCode)
        .eq("table_name", tableName)
        .single();

Supabase 쿼리 메서드 설명
1. from("hospital_table_column_config")
Apply to useHospitalT...
.from("hospital_table_column_config")
의미: "hospital_table_column_config"라는 테이블에서 데이터를 가져오겠다
프론트엔드 비유: 마치 폴더에서 파일을 찾는 것처럼, DB에서 특정 테이블을 선택하는 것
2. select("columns")
Apply to useHospitalT...
.select("columns")
의미: "columns"라는 컬럼(필드)만 가져오겠다
프론트엔드 비유: 객체에서 특정 속성만 추출하는 것
Apply to useHospitalT...
// 예시
const user = { name: "김철수", age: 25, email: "kim@test.com" };
const { name } = user; // name만 가져오기
3. eq("hospital_id", hospitalCode)
Apply to useHospitalT...
.eq("hospital_id", hospitalCode)
의미: "hospital_id" 컬럼이 hospitalCode 값과 같은 행들만 필터링
프론트엔드 비유: 배열의 filter 메서드
Apply to useHospitalT...
// 예시
const hospitals = [
{ id: "A", name: "서울병원" },
{ id: "B", name: "부산병원" },
{ id: "A", name: "서울병원2" }
];
const hospitalA = hospitals.filter(h => h.id === "A");
4. single()
Apply to useHospitalT...
.single()
의미: 결과가 정확히 1개여야 한다. 0개면 에러, 2개 이상이어도 에러
프론트엔드 비유: 배열에서 첫 번째 요소만 가져오되, 배열이 비어있으면 에러
Apply to useHospitalT...
// 예시
const results = [1, 2, 3];
const first = results[0]; // 첫 번째 요소
// 하지만 results가 비어있으면 undefined가 됨
전체 쿼리 해석
Apply to useHospitalT...
const { data, error } = await supabase
.from("hospital_table_column_config") // 1. 테이블 선택
.select("columns") // 2. columns 필드만 가져오기
.eq("hospital_id", hospitalCode) // 3. 병원 코드가 일치하는 행만
.eq("table_name", tableName) // 4. 테이블 이름도 일치하는 행만
.single(); // 5. 결과가 정확히 1개여야 함
DB 테이블 구조 예시
Apply to useHospitalT...
hospital_table_column_config 테이블:

hospital_idtable_namecolumnsupdated_at
HOSPITAL_Ainterpretation_result_check[{id: "name", visible: true}]2024-01-01
HOSPITAL_Atransport_management[{id: "code", visible: false}]2024-01-01
HOSPITAL_Binterpretation_result_check[{id: "phone", visible: true}]2024-01-01

쿼리 결과 예시
병원 A의 해석결과체크 테이블 조회 시:
Apply to useHospitalT...
hospitalCode = "HOSPITAL_A"
tableName = "interpretation_result_check"

// 결과: [{id: "name", visible: true}]
병원 B의 해석결과체크 테이블 조회 시:
Apply to useHospitalT...
hospitalCode = "HOSPITAL_B"
tableName = "interpretation_result_check"

// 결과: [{id: "phone", visible: true}]
프론트엔드에서의 비유
Apply to useHospitalT...
// 마치 이런 구조와 비슷합니다
const hospitalConfigs = {
HOSPITAL_A: {
interpretation_result_check: { columns: [...] },
transport_management: { columns: [...] }
},
HOSPITAL_B: {
interpretation_result_check: { columns: [...] }
}
};

// 특정 병원의 특정 테이블 설정 가져오기
const config = hospitalConfigs[hospitalCode]?.[tableName];

profile
Beyond the wall

0개의 댓글