$builder->where()

이 함수를 사용하면 다섯 가지 방법중 하나를 사용하여 WHERE 절을 설정할 수 있습니다.

  1. key/value 방법
    $builder->where('idx', 1)->get()->getResult();
    
    Array
    (
        [0] => stdClass Object
            (
                [idx] => 1
                [name] => test1
                [title] => title-test1
                [email] => test1@test.com
            )
    
    )
    

    * Query : SELECT * FROM `my_table` WHERE `idx` = 1

    등호(=)가 추가됩니다.
    `where()` 함수를 여러번 호출하면 AND와 함께 체인으로 연결됩니다.

    $builder->where('idx', 1)->where('name', 'test1')->get()->getResult();
    
    Array
    (
        [0] => stdClass Object
            (
                [idx] => 1
                [name] => test1
                [title] => title-test1
                [email] => test1@test.com
            )
    
    )
    

    * Query : SELECT * FROM `my_table` WHERE `idx` = 1 AND `name` = 'test1'

  2. 사용자 key/value 방법

    비교를 제어하기 위해 첫 번째 매개 변수에 연산자를 포함시킬 수 있습니다

    $builder->where('name !=', 'test1')->where('idx <', 2)->get()->getResult();
    
    Array
    (
        [0] => stdClass Object
            (
                [idx] => 2
                [name] => test2
                [title] => title-test2
                [email] => test2@test.com
            )
    
    )
    

    * Query : SELECT * FROM `my_table` WHERE `name` != 'test1' AND `idx` <= 2

  3. 연관 배열 방법

    이 방법을 사용할 때 사용자 연산자를 포함시킬 수 있습니다.

    $builder->where(['name' => 'test1', 'idx <' => 3])->get()->getResult();
    
    Array
    (
        [0] => stdClass Object
            (
                [idx] => 1
                [name] => test1
                [title] => title-test1
                [email] => test1@test.com
            )
    
    )
    

    * Query : SELECT * FROM `my_table` WHERE `name` = 'test1' AND `idx` < 3

  4. 맞춤 문자열

    비교절을 직접 작성할 수 있습니다.

    $builder->where("name = 'test2' AND idx <= 3")->get()->getResult();
    
    Array
    (
        [0] => stdClass Object
            (
                [idx] => 2
                [name] => test2
                [title] => title-test2
                [email] => test2@test.com
            )
    
    )
    

    * Query : SELECT * FROM `my_table` WHERE `name` = 'test2' AND `idx` <= 3

    `$builder->where()`는 세 번째 매개 변수를 옵션으로 허용하며, `false`로 설정하면 필드 또는 테이블 이름을 보호하지 않습니다.

    $builder->where("name IN ('test1', 'test2')", null, false)->get()->getResult();
    
    Array
    (
        [0] => stdClass Object
            (
                [idx] => 1
                [name] => test1
                [title] => title-test1
                [email] => test1@test.com
            )
    
        [1] => stdClass Object
            (
                [idx] => 2
                [name] => test2
                [title] => title-test2
                [email] => test2@test.com
            )
    
    )
    

    * Query : SELECT * FROM `my_table` WHERE name IN ('test1', 'test2')

  5. 서브 쿼리

    익명 함수를 사용하여 서브 쿼리를 만들 수 있습니다.

    $builder->where('idx <', function (\CodeIgniter\Database\BaseBuilder $builder) {
        return $builder->selectMax('idx')->from('my_table');
    })->get()->getResult();
    
    Array
    (
        [0] => stdClass Object
            (
                [idx] => 1
                [name] => test1
                [title] => title-test1
                [email] => test1@test.com
            )
    
        [1] => stdClass Object
            (
                [idx] => 2
                [name] => test2
                [title] => title-test2
                [email] => test2@test.com
            )
    
    )
    1

    * Query : SELECT * FROM `my_table` WHERE `idx` < (SELECT MAX(`idx`) AS `idx` FROM `my_table`)

$builder->orWhere()

이 함수는 여러 인스턴스가 OR로 결합된다는 점을 제외하고 위의 함수와 동일합니다.

$builder->where('name', 'test2')->orWhere('name', 'test3')->get()->getResult();

Array
(
    [0] => stdClass Object
        (
            [idx] => 2
            [name] => test2
            [title] => title-test2
            [email] => test2@test.com
        )

    [1] => stdClass Object
        (
            [idx] => 3
            [name] => test3
            [title] => title-test3
            [email] => test3@test.com
        )

)

* Query : SELECT * FROM `my_table` WHERE `name` = 'test2' OR `name` = 'test3'

$builder->whereIn()

AND로 결합된 WHERE field IN ('item', 'item') SQL 쿼리를 생성합니다.

$builder->where('name', 'test2')->whereIn('idx', [1,2])->get()->getResult();

Array
(
    [0] => stdClass Object
        (
            [idx] => 2
            [name] => test2
            [title] => title-test2
            [email] => test2@test.com
        )

)

* Query : SELECT * FROM `my_table` WHERE `name` = 'test2' AND `idx` IN (1,2)

배열 대신 서브 쿼리를 사용할 수 있습니다.

$builder->where('name', 'test2')->whereIn('idx', function (\CodeIgniter\Database\BaseBuilder $builder) {
    return $builder->select('idx')->from('my_table');
})->get()->getResult();

Array
(
    [0] => stdClass Object
        (
            [idx] => 2
            [name] => test2
            [title] => title-test2
            [email] => test2@test.com
        )

)

* Query : SELECT * FROM `my_table` WHERE `name` = 'test2' AND `idx` IN (SELECT `idx` FROM `my_table`)

$builder->orWhereIn()

OR로 결합된 WHERE field IN ('item', 'item') SQL 쿼리를 생성합니다.

$builder->where('name', 'test2')->orWhereIn('idx', [1,2])->get()->getResult();

Array
(
    [0] => stdClass Object
        (
            [idx] => 1
            [name] => test1
            [title] => title-test1
            [email] => test1@test.com
        )

    [1] => stdClass Object
        (
            [idx] => 2
            [name] => test2
            [title] => title-test2
            [email] => test2@test.com
        )

)

* Query : SELECT * FROM `my_table` WHERE `name` = 'test2' OR `idx` IN (1,2)

배열 대신 서브 쿼리를 사용할 수 있습니다.

$builder->where('name', 'test2')->orWhereIn('idx', function (\CodeIgniter\Database\BaseBuilder $builder) {
    return $builder->select('idx')->from('my_table')->where('idx <', 1);
})->get()->getResult();

Array
(
    [0] => stdClass Object
        (
            [idx] => 2
            [name] => test2
            [title] => title-test2
            [email] => test2@test.com
        )

)

* Query : SELECT * FROM `my_table` WHERE `name` = 'test2' OR `idx` IN (SELECT `idx` FROM `my_table` WHERE `idx` < 1)

$builder->whereNotIn()

AND로 결합된 WHERE field NOT IN ('item', 'item') SQL 쿼리를 생성합니다.

$builder->where('name !=', 'test2')->whereNotIn('idx', [1,2])->get()->getResult();

Array
(
    [0] => stdClass Object
        (
            [idx] => 3
            [name] => test3
            [title] => title-test3
            [email] => test3@test.com
        )

)

* Query : SELECT * FROM `my_table` WHERE `name` != 'test2' AND `idx` NOT IN (1,2)

배열 대신 서브 쿼리를 사용할 수 있습니다.

$builder->where('name !=', 'test2')->whereNotIn('idx', function (\CodeIgniter\Database\BaseBuilder $builder) {
    return $builder->select('idx')->from('my_table')->whereIn('idx', [1,2]);
})->get()->getResult();

Array
(
    [0] => stdClass Object
        (
            [idx] => 3
            [name] => test3
            [title] => title-test3
            [email] => test3@test.com
        )

)

* Query : SELECT * FROM `my_table` WHERE `name` != 'test2' AND `idx` NOT IN (SELECT `idx` FROM `my_table` WHERE `idx` IN (1,2))

$builder->orWhereNotIn()

OR로 결합된 WHERE field NOT IN ('item', 'item') SQL 쿼리를 생성합니다.

$builder->where('name !=', 'test2')->orWhereNotIn('idx', [1,2])->get()->getResult();

Array
(
    [0] => stdClass Object
        (
            [idx] => 1
            [name] => test1
            [title] => title-test1
            [email] => test1@test.com
        )

    [1] => stdClass Object
        (
            [idx] => 3
            [name] => test3
            [title] => title-test3
            [email] => test3@test.com
        )

)

* Query : SELECT * FROM `my_table` WHERE `name` != 'test2' OR `idx` NOT IN (1,2)

배열 대신 서브 쿼리를 사용할 수 있습니다.

$builder->where('name !=', 'test2')->orWhereNotIn('idx', function (\CodeIgniter\Database\BaseBuilder $builder) {
    return $builder->select('idx')->from('my_table')->whereIn('idx', [1,2]);
})->get()->getResult();

Array
(
    [0] => stdClass Object
        (
            [idx] => 1
            [name] => test1
            [title] => title-test1
            [email] => test1@test.com
        )

    [1] => stdClass Object
        (
            [idx] => 3
            [name] => test3
            [title] => title-test3
            [email] => test3@test.com
        )

)

* Query : SELECT * FROM `my_table` WHERE `name` != 'test2' OR `idx` NOT IN (SELECT `idx` FROM `my_table` WHERE `idx` IN (1,2))