Skip to main content

Puri 쿼리 빌더

네, Puri는 Promise 인터페이스를 직접 구현합니다.
사용 방법:
주의:
  • .getMany(), .getOne(), .getScalar() 같은 메서드는 존재하지 않습니다
  • 항상 배열을 반환합니다 (Expand<TResult>[])
  • 단일 객체는 .first() 사용
Puri.count(), Puri.sum(), Puri.avg() 등의 static 메서드를 사용합니다.
INNER JOIN:
LEFT JOIN:
복잡한 JOIN 조건 (콜백 방식):
WHERE IN 서브쿼리:
FROM 서브쿼리:

마이그레이션

1. Entity 수정Sonamu UI에서 Entity 편집2. 마이그레이션 생성
또는 CLI:
3. 마이그레이션 실행
Shadow DB를 사용하여 테스트합니다:
Shadow DB 설정:
임시 컬럼을 활용하여 데이터를 변환한 후 원본 컬럼을 교체합니다.예시: string → integer 변환
Entity 자동 생성 시 DROP/ADD로 생성되므로 수동으로 RENAME 사용:
FK 제약을 삭제한 후 컬럼 변경, 다시 FK 재생성:

PostgreSQL 특화

JSONB 포함 연산자 @>에는 타입 안전한 .whereJsonSupersetOf()를 사용합니다. 그 외 JSONB 연산자는 Puri.rawString()과 파라미터가 바인딩된 .whereRaw()를 사용합니다.JSONB 속성 조회 (->>, ->):
JSONB 포함 연산자 (@>):
값은 내부에서 직렬화되고 바인딩되므로 JSON.stringify()를 직접 호출하지 않습니다. 괄호 안에서 OR 조건이 필요하면 whereGroup()orWhereJsonSupersetOf()를 사용합니다.JSONB 키 존재 여부 (?):
중첩 JSONB 속성:
주의사항:
  • ->> 는 텍스트 반환, -> 는 JSONB 반환
  • SQL Injection 방지를 위해 파라미터 바인딩 사용
  • GIN 인덱스 생성 권장: CREATE INDEX ON products USING gin(metadata);
ts_vector 컬럼 생성:
검색 쿼리:
하이라이팅:

트랜잭션

방법 1: 수동 트랜잭션 (getPuri("w").transaction())
방법 2: @transactional() 데코레이터
에러 발생 시 자동 롤백됩니다. 더 자세한 내용은 수동 트랜잭션@transactional 데코레이터 문서를 참고하세요.

관련 문서