이 함수를 사용하면 다섯 가지 방법중 하나를 사용하여 WHERE 절을 설정할 수 있습니다.
$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'
비교를 제어하기 위해 첫 번째 매개 변수에 연산자를 포함시킬 수 있습니다
$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
이 방법을 사용할 때 사용자 연산자를 포함시킬 수 있습니다.
$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
비교절을 직접 작성할 수 있습니다.
$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')
익명 함수를 사용하여 서브 쿼리를 만들 수 있습니다.
$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`)
이 함수는 여러 인스턴스가 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'
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`)
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)
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))
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))