"Laravel 데이터베이스: 쿼리 빌더"의 두 판 사이의 차이

103번째 줄: 103번째 줄:


===Where Not 절===
===Where Not 절===
<code>whereNot</code>과 <code>orWhereNot</code> 메소드는 주어진 그룹의 쿼리 제약 조건을 부정하는 데 사용할 수 있습니다. 예를 들어, 다음 쿼리는 클리어런스 중이거나 가격이 10보다 적은 제품을 제외합니다:
<syntaxhighlight lang='php'>
$products = DB::table('products')
                ->whereNot(function (Builder $query) {
                    $query->where('clearance', true)
                          ->orWhere('price', '<', 10);
                })
                ->get();
</syntaxhighlight>
===Where Any / All 절===
===Where Any / All 절===
===JSON Where 절===
===JSON Where 절===

2024년 6월 5일 (수) 02:10 판

1 개요

Database: Query Builder
데이터: 쿼리 빌더

2 소개

Laravel의 데이터베이스 쿼리 빌더는 데이터베이스 쿼리를 생성하고 실행하기 위한 편리하고 유연한 인터페이스를 제공합니다. 이 빌더는 애플리케이션에서 대부분의 데이터베이스 작업을 수행하는 데 사용할 수 있으며, Laravel이 지원하는 모든 데이터베이스 시스템과 완벽하게 호환됩니다.

Laravel 쿼리 빌더는 SQL 인젝션 공격으로부터 애플리케이션을 보호하기 위해 PDO 파라미터 바인딩을 사용합니다. 쿼리 빌더에 전달되는 문자열을 크리닝(clean)하거나 정화(sanitize)할 필요가 없습니다.

PDO는 컬럼 이름 바인딩을 지원하지 않습니다. 따라서 사용자 입력이 쿼리에서 참조되는 컬럼 이름, 특히 "order by" 컬럼을 결정하도록 허용해서는 안 됩니다.

3 데이터베이스 쿼리 실행

테이블에서 모든 행 조회
테이블에서 단일 행 / 컬럼 조회
컬럼 값 목록 조회

3.1 청킹 결과

3.2 게으른 결과 스트리밍

3.3 집계

4 문 선택

5 원시 표현

6 조인

7 유니온

8 기본 Where 절

8.1 Where 절

쿼리 빌더의 where 메소드를 사용하여 쿼리에 "where" 절을 추가할 수 있습니다. where 메소드의 가장 기본적인 호출에는 세 개의 인수가 필요합니다. 첫 번째 인수는 컬럼의 이름입니다. 두 번째 인수는 데이터베이스에서 지원하는 연산자 중 하나입니다. 세 번째 인수는 컬럼의 값과 비교할 값입니다.

예를 들어, 다음 쿼리는 votes 컬럼의 값이 100이고 age 컬럼의 값이 35보다 큰 사용자를 조회합니다:

$users = DB::table('users')
                ->where('votes', '=', 100)
                ->where('age', '>', 35)
                ->get();

편의를 위해, 컬럼이 주어진 값과 같음(=)을 확인하려는 경우, 두 번째 인수로 값을 전달할 수 있습니다. Laravel은 = 연산자를 사용하려 한다고 가정합니다:

$users = DB::table('users')->where('votes', 100)->get();

앞서 언급했듯이, 데이터베이스 시스템에서 지원하는 모든 연산자를 사용할 수 있습니다:

$users = DB::table('users')
                ->where('votes', '>=', 100)
                ->get();
 
$users = DB::table('users')
                ->where('votes', '<>', 100)
                ->get();
 
$users = DB::table('users')
                ->where('name', 'like', 'T%')
                ->get();

또한 조건의 배열을 where 함수에 전달할 수도 있습니다. 배열의 각 요소는 일반적으로 where 메소드에 전달되는 세 개의 인수를 포함하는 배열이어야 합니다:

$users = DB::table('users')->where([
    ['status', '=', '1'],
    ['subscribed', '<>', '1'],
])->get();

PDO는 컬럼 이름 바인딩을 지원하지 않습니다. 따라서 쿼리에서 참조되는 컬럼 이름을 사용자 입력에 의해 결정되도록 해서는 안 됩니다. 여기에는 "order by" 컬럼이 포함됩니다.

8.2 Or Where 절

Query Builder의 where 메소드를 연속으로 호출할 때, "where" 절들은 and 연산자로 결합됩니다. 그러나 orWhere 메소드를 사용하여 or 연산자로 절을 쿼리에 추가할 수 있습니다. orWhere 메소드는 where 메소드와 동일한 인수를 받습니다:

$users = DB::table('users')
                    ->where('votes', '>', 100)
                    ->orWhere('name', 'John')
                    ->get();

괄호 안에 "or" 조건을 그룹화해야 하는 경우, orWhere 메소드의 첫 번째 인수로 클로저를 전달할 수 있습니다:

$users = DB::table('users')
            ->where('votes', '>', 100)
            ->orWhere(function (Builder $query) {
                $query->where('name', 'Abigail')
                      ->where('votes', '>', 50);
            })
            ->get();

위의 예제는 다음 SQL을 생성합니다:

select * from users where votes > 100 or (name = 'Abigail' and votes > 50)

전역 스코프가 적용될 때 예기치 않은 동작을 방지하기 위해 항상 orWhere 호출을 그룹화해야 합니다.

8.3 Where Not 절

whereNotorWhereNot 메소드는 주어진 그룹의 쿼리 제약 조건을 부정하는 데 사용할 수 있습니다. 예를 들어, 다음 쿼리는 클리어런스 중이거나 가격이 10보다 적은 제품을 제외합니다:

$products = DB::table('products')
                ->whereNot(function (Builder $query) {
                    $query->where('clearance', true)
                          ->orWhere('price', '<', 10);
                })
                ->get();

8.4 Where Any / All 절

8.5 JSON Where 절

8.6 추가 Where 절

8.7 논리적 그룹화

9 고급 Where 절

9.1 Where Exists 조항

9.2 서브쿼리 Where 절

9.3 풀텍스트 Where 절

10 정렬, 그룹화, 리미트, 오프셋

10.1 정렬

10.2 그룹화

10.3 리미트, 오프셋

11 조건절

12 Insert 문

12.1 Upsert

13 Update 문

13.1 JSON 컬럼 업데이트

13.2 증가 및 감소

14 Delete 문

15 비관적 락

16 디버깅

17 참고

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}