쿼리 빌더란
Laravel의 쿼리 빌더는 데이터베이스 쿼리를 유창한 인터페이스로 구축·실행하는 구조입니다.DB 파사드의 table() 메서드로부터 시작해, 메서드 체인으로 쿼리를 조립합니다.
쿼리 빌더는 Laravel이 지원하는 모든 데이터베이스(MySQL, MariaDB, PostgreSQL, SQLite, SQL Server)에서 동작합니다. 데이터베이스를 전환해도 같은 코드를 사용할 수 있습니다.
Eloquent와의 구분 사용
데이터 취득
전건 취득
get()은 Illuminate\Support\Collection을 반환합니다. 각 레코드는 PHP의 stdClass 오브젝트입니다.
1건 취득
특정 컬럼의 값을 리스트로 취득
대량 데이터의 분할 처리
스트리밍 (LazyCollection)
집계
레코드의 존재 확인
SELECT 절
WHERE 절
기본적인 조건
조건의 그룹화
whereIn / whereBetween / whereNull
whereLike (패턴 매치)
whereAny / whereAll (여러 컬럼에 대한 동일 조건)
whereNullSafeEquals (NULL 안전한 등가 비교)
whereNullSafeEquals와 orWhereNullSafeEquals는, 컬럼의 값을 지정한 값과 비교할 때 두 개의 NULL 값을 동등한 것으로 간주하는 비교를 수행합니다.
통상의 = 연산자로는 NULL = NULL은 false가 되지만, whereNullSafeEquals에서는 NULL끼리를 동등하다고 판정합니다. MySQL의 <=> 연산자, PostgreSQL의 IS NOT DISTINCT FROM에 대응합니다.
통상의
where('column', null)은 WHERE column IS NULL로 변환되지만, whereNullSafeEquals('column', $value)는 바인딩된 값이 null이든 null이 아니든 일관되게 동작합니다. 사용자 입력값이 null이 될 수 있는 경우에 특히 편리합니다.JOIN
서브 쿼리 JOIN
정렬·그룹화·리미트
서브 쿼리
벡터 유사도 검색
임베딩 벡터를 저장한 컬럼에 대해whereVectorSimilarTo를 사용하면 지정한 벡터에 가까운 레코드만 검색할 수 있습니다. 벡터 컬럼은 마이그레이션에서 vector 형으로 정의합니다(마이그레이션의 벡터 컬럼).
whereVectorSimilarTo는 유사도가 높은 순으로 정렬합니다. 최소 유사도 지정이 필요 없고 거리 기반 정렬 순서만 명시하고 싶다면 orderByVectorDistance를 사용할 수 있습니다. 반환하는 컬럼에 거리 값을 포함하고 싶을 때는 selectVectorDistance로 별칭을 지정할 수 있습니다.
pgvector 확장을 활성화해 주세요.
Raw 식
INSERT / UPDATE / DELETE
INSERT
UPSERT (INSERT OR UPDATE)
UPDATE
DELETE
조건부 쿼리 (when)
쿼리 조건을 동적으로 적용하고 싶을 때는when()을 사용하면 조건 분기를 깔끔하게 작성할 수 있습니다.
디버그
정리
자주 사용하는 메서드 일람
자주 사용하는 메서드 일람
쿼리 빌더 vs Eloquent
쿼리 빌더 vs Eloquent
쿼리 빌더는 Eloquent보다도 저레벨이며, 모델의 인스턴스가 아닌
stdClass를 반환합니다.
릴레이션이나 모델 이벤트(옵저버)가 필요 없는 경우, 쿼리 빌더 쪽이 심플하고 고속입니다.