Skip to main content

쿼리 빌더란

Laravel의 쿼리 빌더는 데이터베이스 쿼리를 유창한 인터페이스로 구축·실행하는 구조입니다. DB 파사드의 table() 메서드로부터 시작해, 메서드 체인으로 쿼리를 조립합니다.
내부에서는 PDO 파라미터 바인딩을 사용하고 있기 때문에, SQL 인젝션 대책이 자동으로 이루어집니다.
쿼리 빌더는 Laravel이 지원하는 모든 데이터베이스(MySQL, MariaDB, PostgreSQL, SQLite, SQL Server)에서 동작합니다. 데이터베이스를 전환해도 같은 코드를 사용할 수 있습니다.

Eloquent와의 구분 사용

데이터 취득

전건 취득

get()Illuminate\Support\Collection을 반환합니다. 각 레코드는 PHP의 stdClass 오브젝트입니다.

1건 취득

특정 컬럼의 값을 리스트로 취득

대량 데이터의 분할 처리

청크 처리 중에 레코드를 업데이트·삭제하는 경우, chunk()가 아닌 chunkById()를 사용해 주세요. chunk()에서는 레코드의 어긋남이 생길 수 있습니다.

스트리밍 (LazyCollection)

집계

레코드의 존재 확인

SELECT 절

WHERE 절

기본적인 조건

조건의 그룹화

whereIn / whereBetween / whereNull

whereLike (패턴 매치)

whereAny / whereAll (여러 컬럼에 대한 동일 조건)

whereNullSafeEquals (NULL 안전한 등가 비교)

whereNullSafeEqualsorWhereNullSafeEquals는, 컬럼의 값을 지정한 값과 비교할 때 두 개의 NULL 값을 동등한 것으로 간주하는 비교를 수행합니다. 통상의 = 연산자로는 NULL = NULLfalse가 되지만, whereNullSafeEquals에서는 NULL끼리를 동등하다고 판정합니다. MySQL의 <=> 연산자, PostgreSQL의 IS NOT DISTINCT FROM에 대응합니다.
통상의 where('column', null)WHERE column IS NULL로 변환되지만, whereNullSafeEquals('column', $value)는 바인딩된 값이 null이든 null이 아니든 일관되게 동작합니다. 사용자 입력값이 null이 될 수 있는 경우에 특히 편리합니다.

JOIN

서브 쿼리 JOIN

정렬·그룹화·리미트

서브 쿼리

Raw 식

Raw 식은 SQL 문자열로 직접 쿼리에 삽입됩니다. 사용자 입력을 직접 전달하면 SQL 인젝션의 위험이 있습니다. 반드시 바인딩을 사용해 안전하게 기술해 주세요.

INSERT / UPDATE / DELETE

INSERT

UPSERT (INSERT OR UPDATE)

UPDATE

DELETE

조건부 쿼리 (when)

쿼리 조건을 동적으로 적용하고 싶을 때는 when()을 사용하면 조건 분기를 깔끔하게 작성할 수 있습니다.

디버그

dd()는 디버그 시에 편리하지만, 프로덕션 환경에서는 절대로 사용하지 말아 주세요. toSql()getBindings()로 SQL과 바인딩을 확인하는 것이 안전합니다.

정리

쿼리 빌더는 Eloquent보다도 저레벨이며, 모델의 인스턴스가 아닌 stdClass를 반환합니다. 릴레이션이나 모델 이벤트(옵저버)가 필요 없는 경우, 쿼리 빌더 쪽이 심플하고 고속입니다.
마지막 수정일 2026년 7월 13일