쿼리 빌더 클래스

CodeIgniter는 쿼리 빌더 클래스에 대한 액세스를 제공합니다. 이 패턴을 사용하면 최소한의 스크립팅으로 데이터베이스에서 정보를 검색, 삽입 및 업데이트할 수 있습니다. 어떤 경우에는 데이터베이스 작업을 수행하는 데 한두 줄의 코드만 필요합니다. CodeIgniter에서는 각 데이터베이스 테이블이 자체 클래스 파일일 필요가 없습니다. 대신 더욱 단순화된 인터페이스를 제공합니다.

단순성 외에도 쿼리 빌더 기능을 사용하면 쿼리 구문이 각 데이터베이스 어댑터에 의해 생성되므로 데이터베이스 독립적인 애플리케이션을 만들 수 있다는 주요 이점이 있습니다. 또한 값이 시스템에 의해 자동으로 이스케이프되므로 더 안전한 쿼리가 가능합니다.

참고

CodeIgniter는 테이블 및 열 이름에 점(.)을 지원하지 않습니다. v4.5.0부터 점이 포함된 데이터베이스 이름을 지원합니다.

SQL 주입 방지

쿼리 빌더를 사용하면 SQL 문을 매우 안전하게 생성할 수 있습니다. 그러나 어떤 데이터를 전달하더라도 SQL 주입을 방지하도록 설계되지 않았습니다.

쿼리 빌더에 전달되는 인수는 다음과 같습니다.
  1. 필드(또는 테이블) 이름과 같은 식별자

  2. SQL 문자열의 일부

쿼리 빌더는 기본적으로 모든 을 이스케이프합니다.

또한 기본적으로 SQL 문자열의 식별자 및 식별자를 적절하게 보호하려고 시도합니다. 그러나 많은 사용 사례에서 잘 작동하도록 구현되었으며 모든 공격을 방지하도록 설계되지 않았습니다. 따라서 적절한 유효성 검사 없이 사용자 입력을 입력해서는 안 됩니다.

또한 많은 메서드에는 이스케이프를 비활성화하도록 설정할 수 있는 $escape 매개변수가 있습니다. $escape가 false로 설정된 경우 쿼리 빌더에서 보호가 제공되지 않으므로 쿼리 빌더에 전달하기 전에 적절하게 이스케이프되거나 보호되는지 직접 확인해야 합니다. 원시 SQL 문을 지정하는 RawSql를 사용할 때도 마찬가지입니다.

쿼리 빌더 로드

쿼리 빌더는 데이터베이스 연결에서 table() 메서드를 통해 로드됩니다. 그러면 쿼리의 FROM 부분이 설정되고 쿼리 빌더 클래스의 새 인스턴스가 반환됩니다.

<?php

$db      = \Config\Database::connect();
$builder = $db->table('users');

쿼리 빌더는 클래스를 구체적으로 요청할 때만 메모리에 로드되므로 기본적으로 리소스가 사용되지 않습니다.

데이터 선택

다음 메서드를 사용하면 SQL SELECT 문을 작성할 수 있습니다.

Get

$builder->get()

선택 쿼리를 실행하고 결과를 반환합니다. 테이블에서 모든 레코드를 검색하기 위해 단독으로 사용할 수 있습니다.

<?php

$builder = $db->table('mytable');
$query   = $builder->get();  // Produces: SELECT * FROM mytable

첫 번째 및 두 번째 매개변수를 사용하면 LIMIT 및 OFFSET 절을 설정할 수 있습니다.

<?php

$query = $builder->get(10, 20);
/*
 * Executes: SELECT * FROM mytable LIMIT 20, 10
 * (in MySQL. Other databases have slightly different syntax)
 */

위 메서드는 결과를 표시하는 데 사용할 수 있는 $query라는 변수에 할당되어 있음을 알 수 있습니다.

<?php

$query = $builder->get();

foreach ($query->getResult() as $row) {
    echo $row->title;
}

결과 생성에 대한 자세한 내용은 getResult() 메서드를 참조하세요.

$builder->getCompiledSelect()

선택 쿼리를 컴파일하지만 쿼리를 실행하지는 않습니다. 이 메서드는 단순히 SQL 쿼리를 문자열로 반환합니다.

예:

<?php

$sql = $builder->getCompiledSelect();
echo $sql;
// Prints string: SELECT * FROM mytable

아래 첫 번째 쿼리의 매개변수(false)를 사용하면 쿼리 빌더를 재설정할지 여부를 설정할 수 있습니다(매개변수의 기본값은 getCompiledSelect(bool $reset = true)이므로 기본적으로 $builder->get()를 사용할 때와 마찬가지로 재설정됩니다).

<?php

echo $builder->limit(10, 20)->getCompiledSelect(false);
/*
 * Prints string: SELECT * FROM mytable LIMIT 20, 10
 * (in MySQL. Other databases have slightly different syntax)
 */

echo $builder->select('title, content, date')->getCompiledSelect();
// Prints string: SELECT title, content, date FROM mytable LIMIT 20, 10

위의 예에서 주목해야 할 중요한 점은 두 번째 쿼리는 limit(10, 20)를 활용하지 않았지만 생성된 SQL 쿼리에는 LIMIT 20, 10이 있다는 것입니다. 이런 결과가 나오는 이유는 첫 번째 쿼리의 매개변수가 false로 설정되어 있고, 두 번째 쿼리에는 limit(10, 20)가 남아 있기 때문입니다.

$builder->getWhere()

$builder->where() 메서드를 사용하는 대신 첫 번째 매개변수에 “where” 절을 추가할 수 있다는 점을 제외하면 get() 메서드와 동일합니다.

<?php

$query = $builder->getWhere(['id' => $id], $limit, $offset);

자세한 내용은 아래의 where() 메서드를 읽어보세요.

Select

$builder->select()

쿼리의 SELECT 부분을 작성할 수 있습니다.

<?php

$builder->select('title, content, date');
$query = $builder->get();
// Executes: SELECT title, content, date FROM mytable

참고

테이블에서 모두(*)를 선택하는 경우에는 이 메서드를 사용할 필요가 없습니다. 생략하면 CodeIgniter는 모든 필드를 선택한다고 가정하고 자동으로 SELECT *를 추가합니다.

$builder->select()는 선택적 두 번째 매개변수를 허용합니다. false로 설정하면 CodeIgniter는 필드 또는 테이블 이름을 보호하려고 시도하지 않습니다. 이는 필드 자동 이스케이프로 인해 필드가 손상될 수 있는 복합 select 문이 필요한 경우 유용합니다.

<?php

$builder->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4) AS amount_paid', false);
$query = $builder->get();
RawSql

Added in version 4.2.0.

v4.2.0부터 $builder->select()는 원시 SQL 문자열을 표현하는 CodeIgniter\Database\RawSql 인스턴스를 허용합니다.

<?php

use CodeIgniter\Database\RawSql;

$sql = 'REGEXP_SUBSTR(ral_anno,"[0-9]{1,2}([,.][0-9]{1,3})([,.][0-9]{1,3})") AS ral';
$builder->select(new RawSql($sql));
$query = $builder->get();

경고

RawSql을 사용하는 경우 값을 이스케이프하고 식별자를 수동으로 보호해야 합니다. 그렇지 않으면 SQL 주입이 발생할 수 있습니다.

$builder->selectMax()

쿼리에 대한 SELECT MAX(필드) 부분을 작성합니다. 선택적으로 두 번째 매개변수를 포함하여 결과 필드의 이름을 바꿀 수 있습니다.

<?php

$builder->selectMax('age');
$query = $builder->get();
// Produces: SELECT MAX(age) as age FROM mytable

$builder->selectMax('age', 'member_age');
$query = $builder->get();
// Produces: SELECT MAX(age) as member_age FROM mytable

$builder->selectMin()

쿼리에 대한 SELECT MIN(필드) 부분을 작성합니다. selectMax()와 마찬가지로 선택적으로 두 번째 매개변수를 포함하여 결과 필드의 이름을 바꿀 수 있습니다.

<?php

$builder->selectMin('age');
$query = $builder->get();
// Produces: SELECT MIN(age) as age FROM mytable

$builder->selectAvg()

쿼리에 대한 SELECT AVG(필드) 부분을 작성합니다. selectMax()와 마찬가지로 선택적으로 두 번째 매개변수를 포함하여 결과 필드의 이름을 바꿀 수 있습니다.

<?php

$builder->selectAvg('age');
$query = $builder->get();
// Produces: SELECT AVG(age) as age FROM mytable

$builder->selectSum()

쿼리에 대한 SELECT SUM(필드) 부분을 작성합니다. selectMax()와 마찬가지로 선택적으로 두 번째 매개변수를 포함하여 결과 필드의 이름을 바꿀 수 있습니다.

<?php

$builder->selectSum('age');
$query = $builder->get();
// Produces: SELECT SUM(age) as age FROM mytable

$builder->selectCount()

쿼리에 대한 SELECT COUNT(필드) 부분을 작성합니다. selectMax()와 마찬가지로 선택적으로 두 번째 매개변수를 포함하여 결과 필드의 이름을 바꿀 수 있습니다.

참고

이 메서드는 groupBy()와 함께 사용할 때 특히 유용합니다. 전체 결과 수 계산은 일반적으로 countAll() 또는 countAllResults()를 참조하세요.

<?php

$builder->selectCount('age');
$query = $builder->get();
// Produces: SELECT COUNT(age) as age FROM mytable

$builder->selectSubquery()

SELECT 섹션에 하위 쿼리를 추가합니다.

$subquery = $db->table('countries')->select('name')->where('id', 1);
$builder  = $db->table('users')->select('name')->selectSubquery($subquery, 'country');
$query    = $builder->get();
// Produces: SELECT `name`, (SELECT `name` FROM `countries` WHERE `id` = 1) `country` FROM `users`

From

$builder->from()

쿼리의 FROM 부분을 작성할 수 있습니다.

<?php

$builder = $db->table('users');
$builder->select('title, content, date');
$builder->from('mytable');
$query = $builder->get();
// Produces: SELECT title, content, date FROM users, mytable

참고

앞에서 설명한 것처럼 쿼리의 FROM 부분은 $db->table() 메서드에서 지정할 수 있습니다. from()에 대한 추가 호출은 쿼리의 FROM 부분에 더 많은 테이블을 추가합니다.

서브쿼리

$builder->fromSubquery()

FROM 쿼리의 일부를 하위 쿼리로 작성할 수 있습니다.

여기에서 기존 테이블에 하위 쿼리를 추가합니다.

<?php

$subquery = $db->table('users');
$builder  = $db->table('jobs')->fromSubquery($subquery, 'alias');
$query    = $builder->get();
// Produces: SELECT * FROM `jobs`, (SELECT * FROM `users`) `alias`

$db->newQuery() 메서드를 사용하여 하위 쿼리를 기본 테이블로 만듭니다.

<?php

$subquery = $db->table('users')->select('id, name');
$builder  = $db->newQuery()->fromSubquery($subquery, 't');
$query    = $builder->get();
// Produces: SELECT * FROM (SELECT `id`, `name` FROM users) `t`

Join

$builder->join()

쿼리의 JOIN 부분을 작성할 수 있습니다.

<?php

$builder = $db->table('blogs');
$builder->select('*');
$builder->join('comments', 'comments.id = blogs.id');
$query = $builder->get();
/*
 * Produces:
 * SELECT * FROM blogs JOIN comments ON comments.id = blogs.id
 */

하나의 쿼리에 여러 조인이 필요한 경우 여러 메서드 호출을 수행할 수 있습니다.

특정 유형의 JOIN이 필요한 경우 메서드의 세 번째 매개변수를 통해 이를 지정할 수 있습니다. 옵션은 다음과 같습니다: left, right, outer, inner, left outerright outer.

<?php

$builder->join('comments', 'comments.id = blogs.id', 'left');
// Produces: LEFT JOIN comments ON comments.id = blogs.id
RawSql

Added in version 4.2.0.

v4.2.0부터 $builder->join()는 원시 SQL 문자열을 표현하는 JOIN ON 조건으로 CodeIgniter\Database\RawSql 인스턴스를 허용합니다.

<?php

use CodeIgniter\Database\RawSql;

$sql = 'user.id = device.user_id AND ((1=1 OR 1=1) OR (1=1 OR 1=1))';
$builder->join('user', new RawSql($sql), 'LEFT');
// Produces: LEFT JOIN "user" ON user.id = device.user_id AND ((1=1 OR 1=1) OR (1=1 OR 1=1))

경고

RawSql을 사용하는 경우 값을 이스케이프하고 식별자를 수동으로 보호해야 합니다. 그렇지 않으면 SQL 주입이 발생할 수 있습니다.

특정 데이터 찾기

Where

$builder->where()

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

참고

이 메서드에 전달된 모든 값은 자동으로 이스케이프되어 사용자 지정 문자열을 사용하는 경우를 제외하고 더 안전한 쿼리를 생성합니다.

참고

$builder->where()는 선택적인 세 번째 매개변수를 허용합니다. false로 설정하면 CodeIgniter는 필드 또는 테이블 이름을 보호하려고 시도하지 않습니다.

1. 간단한 키/값 방법
<?php

$builder->where('name', $name);
// Produces: WHERE name = 'Joe'

등호가 추가되었습니다.

여러 메서드 호출을 사용하는 경우 메서드 호출 사이에 AND를 사용하여 함께 연결됩니다.

<?php

$builder->where('name', $name);
$builder->where('title', $title);
$builder->where('status', $status);
// WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
2. 사용자 정의 키/값 방법

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

<?php

$builder->where('name !=', $name);
$builder->where('id <', $id);
// Produces: WHERE name != 'Joe' AND id < 45
3. 연관배열 방법
<?php

$array = ['name' => $name, 'title' => $title, 'status' => $status];
$builder->where($array);
// Produces: WHERE name = 'Joe' AND title = 'boss' AND status = 'active'

이 메서드를 사용하여 자신만의 연산자를 포함할 수도 있습니다.

<?php

$array = ['name !=' => $name, 'id <' => $id, 'date >' => $date];
$builder->where($array);
4. 맞춤 문자열

자신만의 절을 수동으로 작성할 수 있습니다.

<?php

$where = "name='Joe' AND status='boss' OR status='active'";
$builder->where($where);

경고

문자열 내에서 사용자 제공 데이터를 사용하는 경우 값을 이스케이프하고 식별자를 수동으로 보호해야 합니다. 그렇지 않으면 SQL 주입이 발생할 수 있습니다.

<?php

$name  = $builder->db->escape('Joe');
$where = "name={$name} AND status='boss' OR status='active'";
$builder->where($where);
5. RawSql

Added in version 4.2.0.

v4.2.0부터 $builder->where()는 원시 SQL 문자열을 표현하는 CodeIgniter\Database\RawSql 인스턴스를 허용합니다.

<?php

use CodeIgniter\Database\RawSql;

$sql = "id > 2 AND name != 'Accountant'";
$builder->where(new RawSql($sql));

경고

RawSql을 사용하는 경우 값을 이스케이프하고 식별자를 수동으로 보호해야 합니다. 그렇지 않으면 SQL 주입이 발생할 수 있습니다.

6. Subqueries
<?php

// With closure
use CodeIgniter\Database\BaseBuilder;

$builder->where('advance_amount <', static function (BaseBuilder $builder) {
    $builder->select('MAX(advance_amount)', false)->from('orders')->where('id >', 2);
});
// Produces: WHERE "advance_amount" < (SELECT MAX(advance_amount) FROM "orders" WHERE "id" > 2)

// With builder directly
$subQuery = $db->table('orders')->select('MAX(advance_amount)', false)->where('id >', 2);
$builder->where('advance_amount <', $subQuery);

$builder->orWhere()

이 메서드는 여러 인스턴스가 OR로 결합된다는 점을 제외하면 위의 메서드와 동일합니다.

<?php

$builder->where('name !=', $name);
$builder->orWhere('id >', $id);
// Produces: WHERE name != 'Joe' OR id > 50

$builder->whereIn()

적절한 경우 AND로 조인된 WHERE 필드 IN (‘item’, ‘item’) SQL 쿼리를 생성합니다.

<?php

$names = ['Frank', 'Todd', 'James'];
$builder->whereIn('username', $names);
// Produces: WHERE username IN ('Frank', 'Todd', 'James')

값 배열 대신 하위 쿼리를 사용할 수 있습니다.

<?php

// With closure
use CodeIgniter\Database\BaseBuilder;

$builder->whereIn('id', static function (BaseBuilder $builder) {
    $builder->select('job_id')->from('users_jobs')->where('user_id', 3);
});
// Produces: WHERE "id" IN (SELECT "job_id" FROM "users_jobs" WHERE "user_id" = 3)

// With builder directly
$subQuery = $db->table('users_jobs')->select('job_id')->where('user_id', 3);
$builder->whereIn('id', $subQuery);

$builder->orWhereIn()

적절한 경우 OR과 결합된 WHERE 필드 IN (‘항목’, ‘항목’) SQL 쿼리를 생성합니다.

<?php

$names = ['Frank', 'Todd', 'James'];
$builder->orWhereIn('username', $names);
// Produces: OR username IN ('Frank', 'Todd', 'James')

값 배열 대신 하위 쿼리를 사용할 수 있습니다.

<?php

// With closure
use CodeIgniter\Database\BaseBuilder;

$builder->orWhereIn('id', static function (BaseBuilder $builder) {
    $builder->select('job_id')->from('users_jobs')->where('user_id', 3);
});
// Produces: OR "id" IN (SELECT "job_id" FROM "users_jobs" WHERE "user_id" = 3)

// With builder directly
$subQuery = $db->table('users_jobs')->select('job_id')->where('user_id', 3);
$builder->orWhereIn('id', $subQuery);

$builder->whereNotIn()

적절한 경우 AND로 조인된 WHERE 필드 NOT IN (‘item’, ‘item’) SQL 쿼리를 생성합니다.

<?php

$names = ['Frank', 'Todd', 'James'];
$builder->whereNotIn('username', $names);
// Produces: WHERE username NOT IN ('Frank', 'Todd', 'James')

값 배열 대신 하위 쿼리를 사용할 수 있습니다.

<?php

// With closure
use CodeIgniter\Database\BaseBuilder;

$builder->whereNotIn('id', static function (BaseBuilder $builder) {
    $builder->select('job_id')->from('users_jobs')->where('user_id', 3);
});
// Produces: WHERE "id" NOT IN (SELECT "job_id" FROM "users_jobs" WHERE "user_id" = 3)

// With builder directly
$subQuery = $db->table('users_jobs')->select('job_id')->where('user_id', 3);
$builder->whereNotIn('id', $subQuery);

$builder->orWhereNotIn()

해당되는 경우 WHERE 필드 NOT IN (‘item’, ‘item’) SQL 쿼리를 OR과 결합하여 생성합니다.

<?php

$names = ['Frank', 'Todd', 'James'];
$builder->orWhereNotIn('username', $names);
// Produces: OR username NOT IN ('Frank', 'Todd', 'James')

값 배열 대신 하위 쿼리를 사용할 수 있습니다.

<?php

// With closure
use CodeIgniter\Database\BaseBuilder;

$builder->orWhereNotIn('id', static function (BaseBuilder $builder) {
    $builder->select('job_id')->from('users_jobs')->where('user_id', 3);
});
// Produces: OR "id" NOT IN (SELECT "job_id" FROM "users_jobs" WHERE "user_id" = 3)

// With builder directly
$subQuery = $db->table('users_jobs')->select('job_id')->where('user_id', 3);
$builder->orWhereNotIn('id', $subQuery);

유사한 데이터 찾기

Like

$builder->like()

이 메서드를 사용하면 검색에 유용한 LIKE 절을 생성할 수 있습니다.

참고

이 메서드에 전달된 모든 값은 자동으로 이스케이프됩니다.

참고

모든 like* 메서드 변형은 true의 다섯 번째 매개변수를 메서드에 전달하여 대소문자를 구분하지 않고 검색을 수행하도록 강제할 수 있습니다. 이는 가능한 경우 플랫폼별 기능을 사용하고 값을 소문자로 강제 적용합니다(예: WHERE LOWER(column) LIKE '%search%'). 이를 적용하려면 column 대신 LOWER(column)에 대한 색인을 만들어야 할 수도 있습니다.

1. 간단한 키/값 방법
<?php

$builder->like('title', 'match');
// Produces: WHERE `title` LIKE '%match%' ESCAPE '!'

여러 메서드 호출을 사용하는 경우 메서드 호출 사이에 AND를 사용하여 함께 연결됩니다.

<?php

$builder->like('title', 'match');
$builder->like('body', 'match');
// WHERE `title` LIKE '%match%' ESCAPE '!' AND  `body` LIKE '%match%' ESCAPE '!'

와일드카드 (%)가 배치되는 위치를 제어하려면 선택적 세 번째 인수를 사용할 수 있습니다. 옵션은 none, before, afterboth(기본값)입니다.

<?php

$builder->like('title', 'match', 'none');   // Produces: WHERE `title` LIKE 'match' ESCAPE '!'
$builder->like('title', 'match', 'before'); // Produces: WHERE `title` LIKE '%match' ESCAPE '!'
$builder->like('title', 'match', 'after');  // Produces: WHERE `title` LIKE 'match%' ESCAPE '!'
$builder->like('title', 'match', 'both');   // Produces: WHERE `title` LIKE '%match%' ESCAPE '!'
2. 연관배열 메서드
<?php

$array = ['title' => $match, 'page1' => $match, 'page2' => $match];
$builder->like($array);
/*
 * WHERE `title` LIKE '%match%' ESCAPE '!'
 *     AND  `page1` LIKE '%match%' ESCAPE '!'
 *     AND  `page2` LIKE '%match%' ESCAPE '!'
 */
3. RawSql

Added in version 4.2.0.

v4.2.0부터 $builder->like()는 원시 SQL 문자열을 표현하는 CodeIgniter\Database\RawSql 인스턴스를 허용합니다.

<?php

use CodeIgniter\Database\RawSql;

$sql    = "CONCAT(users.name, ' ', IF(users.surname IS NULL OR users.surname = '', '', users.surname))";
$rawSql = new RawSql($sql);
$builder->like($rawSql, 'value', 'both');

경고

RawSql을 사용하는 경우 값을 이스케이프하고 식별자를 수동으로 보호해야 합니다. 그렇지 않으면 SQL 주입이 발생할 수 있습니다.

$builder->orLike()

이 메서드는 여러 인스턴스가 OR로 결합된다는 점을 제외하면 위의 메서드와 동일합니다.

<?php

$builder->like('title', 'match');
$builder->orLike('body', $match);
// WHERE `title` LIKE '%match%' ESCAPE '!' OR  `body` LIKE '%match%' ESCAPE '!'

$builder->notLike()

이 메서드는 NOT LIKE 문을 생성한다는 점을 제외하면 like()와 동일합니다.

<?php

$builder->notLike('title', 'match'); // WHERE `title` NOT LIKE '%match% ESCAPE '!'

$builder->orNotLike()

이 메서드는 여러 인스턴스가 OR로 결합된다는 점을 제외하면 notLike()와 동일합니다.

<?php

$builder->like('title', 'match');
$builder->orNotLike('body', 'match');
// WHERE `title` LIKE '%match% OR  `body` NOT LIKE '%match%' ESCAPE '!'

$builder->groupBy()

쿼리의 GROUP BY 부분을 작성할 수 있습니다.

<?php

$builder->groupBy('title');
// Produces: GROUP BY title

여러 값의 배열을 전달할 수도 있습니다.

<?php

$builder->groupBy(['title', 'date']);
// Produces: GROUP BY title, date

$builder->distinct()

쿼리에 DISTINCT 키워드를 추가합니다.

<?php

$builder->distinct();
$builder->get();
// Produces: SELECT DISTINCT * FROM mytable

$builder->having()

쿼리의 HAVING 부분을 작성할 수 있습니다. 2개의 가능한 구문(인수 1개 또는 2개)이 있습니다.

<?php

$builder->having('user_id = 45'); // Produces: HAVING user_id = 45
$builder->having('user_id', 45); // Produces: HAVING user_id = 45

여러 값의 배열을 전달할 수도 있습니다.

<?php

$builder->having(['title =' => 'My Title', 'id <' => $id]);
// Produces: HAVING title = 'My Title', id < 45

CodeIgniter가 값을 이스케이프하는 데이터베이스를 사용하는 경우 선택적 세 번째 인수를 전달하고 false로 설정하여 콘텐츠 이스케이프를 방지할 수 있습니다.

<?php

$builder->having('user_id', 45); // Produces: HAVING `user_id` = 45 in some databases such as MySQL
$builder->having('user_id', 45, false); // Produces: HAVING user_id = 45

$builder->orHaving()

having()와 동일하며 여러 절을 OR로만 구분합니다.

$builder->havingIn()

해당되는 경우 AND로 조인된 HAVING 필드 IN (‘item’, ‘item’) SQL 쿼리를 생성합니다.

<?php

$groups = [1, 2, 3];
$builder->havingIn('group_id', $groups);
// Produces: HAVING group_id IN (1, 2, 3)

값 배열 대신 하위 쿼리를 사용할 수 있습니다.

<?php

// With closure
use CodeIgniter\Database\BaseBuilder;

$builder->havingIn('id', static function (BaseBuilder $builder) {
    $builder->select('user_id')->from('users_jobs')->where('group_id', 3);
});
// Produces: HAVING "id" IN (SELECT "user_id" FROM "users_jobs" WHERE "group_id" = 3)

// With builder directly
$subQuery = $db->table('users_jobs')->select('user_id')->where('group_id', 3);
$builder->havingIn('id', $subQuery);

$builder->orHavingIn()

해당되는 경우 OR과 결합된 HAVING 필드 IN (‘item’, ‘item’) SQL 쿼리를 생성합니다.

<?php

$groups = [1, 2, 3];
$builder->orHavingIn('group_id', $groups);
// Produces: OR group_id IN (1, 2, 3)

값 배열 대신 하위 쿼리를 사용할 수 있습니다.

<?php

// With closure
use CodeIgniter\Database\BaseBuilder;

$builder->orHavingIn('id', static function (BaseBuilder $builder) {
    $builder->select('user_id')->from('users_jobs')->where('group_id', 3);
});
// Produces: OR "id" IN (SELECT "user_id" FROM "users_jobs" WHERE "group_id" = 3)

// With builder directly
$subQuery = $db->table('users_jobs')->select('user_id')->where('group_id', 3);
$builder->orHavingIn('id', $subQuery);

$builder->havingNotIn()

해당되는 경우 AND로 조인된 HAVING 필드 NOT IN (‘item’, ‘item’) SQL 쿼리를 생성합니다.

<?php

$groups = [1, 2, 3];
$builder->havingNotIn('group_id', $groups);
// Produces: HAVING group_id NOT IN (1, 2, 3)

값 배열 대신 하위 쿼리를 사용할 수 있습니다.

<?php

// With closure
use CodeIgniter\Database\BaseBuilder;

$builder->havingNotIn('id', static function (BaseBuilder $builder) {
    $builder->select('user_id')->from('users_jobs')->where('group_id', 3);
});
// Produces: HAVING "id" NOT IN (SELECT "user_id" FROM "users_jobs" WHERE "group_id" = 3)

// With builder directly
$subQuery = $db->table('users_jobs')->select('user_id')->where('group_id', 3);
$builder->havingNotIn('id', $subQuery);

$builder->orHavingNotIn()

해당되는 경우 OR과 결합된 HAVING 필드 NOT IN (‘item’, ‘item’) SQL 쿼리를 생성합니다.

<?php

$groups = [1, 2, 3];
$builder->havingNotIn('group_id', $groups);
// Produces: OR group_id NOT IN (1, 2, 3)

값 배열 대신 하위 쿼리를 사용할 수 있습니다.

<?php

// With closure
use CodeIgniter\Database\BaseBuilder;

$builder->orHavingNotIn('id', static function (BaseBuilder $builder) {
    $builder->select('user_id')->from('users_jobs')->where('group_id', 3);
});
// Produces: OR "id" NOT IN (SELECT "user_id" FROM "users_jobs" WHERE "group_id" = 3)

// With builder directly
$subQuery = $db->table('users_jobs')->select('user_id')->where('group_id', 3);
$builder->orHavingNotIn('id', $subQuery);

$builder->havingLike()

이 메서드를 사용하면 쿼리의 HAVING 부분에 LIKE 절을 생성할 수 있으며 검색에 유용합니다.

참고

이 메서드에 전달된 모든 값은 자동으로 이스케이프됩니다.

참고

모든 havingLike*() 메서드 변형은 true의 다섯 번째 매개변수를 메서드에 전달하여 대소문자를 구분하지 않고 검색을 수행하도록 강제할 수 있습니다. 이는 가능한 경우 플랫폼별 기능을 사용하고 값을 소문자로 강제 적용합니다(예: HAVING LOWER(column) LIKE '%search%'). 이를 적용하려면 column 대신 LOWER(column)에 대한 색인을 만들어야 할 수도 있습니다.

1. 간단한 키/값 방법
<?php

$builder->havingLike('title', 'match');
// Produces: HAVING `title` LIKE '%match%' ESCAPE '!'

여러 메서드 호출을 사용하는 경우 메서드 호출 사이에 AND를 사용하여 함께 연결됩니다.

<?php

$builder->havingLike('title', 'match');
$builder->havingLike('body', 'match');
// HAVING `title` LIKE '%match%' ESCAPE '!' AND  `body` LIKE '%match% ESCAPE '!'

와일드카드 (%)가 배치되는 위치를 제어하려면 선택적 세 번째 인수를 사용할 수 있습니다. 옵션은 before, afterboth(기본값)입니다.

<?php

$builder->havingLike('title', 'match', 'before'); // Produces: HAVING `title` LIKE '%match' ESCAPE '!'
$builder->havingLike('title', 'match', 'after');  // Produces: HAVING `title` LIKE 'match%' ESCAPE '!'
$builder->havingLike('title', 'match', 'both');   // Produces: HAVING `title` LIKE '%match%' ESCAPE '!'
2. 연관배열 메서드
<?php

$array = ['title' => $match, 'page1' => $match, 'page2' => $match];
$builder->havingLike($array);
/*
 *  HAVING `title` LIKE '%match%' ESCAPE '!'
 *      AND  `page1` LIKE '%match%' ESCAPE '!'
 *      AND  `page2` LIKE '%match%' ESCAPE '!'
 */

$builder->orHavingLike()

이 메서드는 여러 인스턴스가 OR로 결합된다는 점을 제외하면 위의 메서드와 동일합니다.

<?php

$builder->havingLike('title', 'match');
$builder->orHavingLike('body', $match);
// HAVING `title` LIKE '%match%' ESCAPE '!' OR  `body` LIKE '%match%' ESCAPE '!'

$builder->notHavingLike()

이 메서드는 NOT LIKE 문을 생성한다는 점을 제외하면 havingLike()와 동일합니다.

<?php

$builder->notHavingLike('title', 'match');
// HAVING `title` NOT LIKE '%match% ESCAPE '!'

$builder->orNotHavingLike()

이 메서드는 여러 인스턴스가 OR로 결합된다는 점을 제외하면 notHavingLike()와 동일합니다.

<?php

$builder->havingLike('title', 'match');
$builder->orNotHavingLike('body', 'match');
// HAVING `title` LIKE '%match% OR  `body` NOT LIKE '%match%' ESCAPE '!'

결과 정렬

OrderBy

$builder->orderBy()

ORDER BY 절을 설정할 수 있습니다.

첫 번째 매개변수에는 정렬하려는 열의 이름이 포함됩니다.

두 번째 매개변수를 사용하면 결과의 방향을 설정할 수 있습니다. 옵션은 ASC, DESC 및 RANDOM입니다.

<?php

$builder->orderBy('title', 'DESC');
// Produces: ORDER BY `title` DESC

첫 번째 매개변수에 자신만의 문자열을 전달할 수도 있습니다.

<?php

$builder->orderBy('title DESC, name ASC');
// Produces: ORDER BY `title` DESC, `name` ASC

또는 여러 필드가 필요한 경우 여러 메서드 호출을 수행할 수 있습니다.

<?php

$builder->orderBy('title', 'DESC');
$builder->orderBy('name', 'ASC');
// Produces: ORDER BY `title` DESC, `name` ASC

RANDOM 방향 옵션을 선택하면 숫자 시드 값을 지정하지 않는 한 첫 번째 매개변수가 무시됩니다.

<?php

$builder->orderBy('title', 'RANDOM');
// Produces: ORDER BY RAND()

$builder->orderBy(42, 'RANDOM');
// Produces: ORDER BY RAND(42)

결과 제한 또는 카운트

Limit

$builder->limit()

쿼리에서 반환할 행 수를 제한할 수 있습니다.

<?php

$builder->limit(10);
// Produces: LIMIT 10

참고

SQL 문에 LIMIT 0을 지정하면 0개의 레코드가 반환됩니다. 다만, Query Builder에 버그가 있는데, limit(0)를 지정하면 생성된 SQL 문에 LIMIT 절이 없고 모든 레코드가 반환된다. 잘못된 동작을 수정하기 위해 v4.5.0에 설정이 추가되었습니다. 자세한 내용은 limit(0) 동작를 참조하세요. 잘못된 동작은 향후 버전에서 수정될 예정이므로 기본 설정을 변경하는 것이 좋습니다.

두 번째 매개변수를 사용하면 결과 오프셋을 설정할 수 있습니다.

<?php

$builder->limit(10, 20);
// Produces: LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax)

$builder->countAllResults()

특정 쿼리 빌더 쿼리의 행 수를 결정할 수 있습니다. 쿼리는 where(), orWhere(), like(), orLike() 등과 같은 쿼리 빌더 제한자를 허용합니다. 예:

<?php

echo $builder->countAllResults(); // Produces an integer, like 25
$builder->like('title', 'match');
$builder->from('my_table');
echo $builder->countAllResults(); // Produces an integer, like 17

그러나 이 메서드는 select()에 전달했을 수 있는 모든 필드 값도 재설정합니다. 이를 유지해야 하는 경우 false를 첫 번째 매개변수로 전달할 수 있습니다.

<?php

echo $builder->countAllResults(false); // Produces an integer, like 17

$builder->countAll()

특정 테이블의 행 수를 결정할 수 있습니다. 예:

<?php

echo $builder->countAll(); // Produces an integer, like 25

countAllResults() 메서드와 마찬가지로 이 메서드는 select()에 전달했을 수 있는 모든 필드 값도 재설정합니다. 이를 유지해야 하는 경우 false를 첫 번째 매개변수로 전달할 수 있습니다.

Union 쿼리

Union

$builder->union()

둘 이상의 SELECT 문의 결과 집합을 결합하는 데 사용됩니다. 고유한 결과만 반환됩니다.

<?php

$builder = $db->table('users')->select('id, name')->limit(10);
$union   = $db->table('groups')->select('id, name');
$builder->union($union)->get();
/*
 * Produces:
 * SELECT * FROM (SELECT `id`, `name` FROM `users` LIMIT 10) uwrp0
 * UNION SELECT * FROM (SELECT `id`, `name` FROM `groups`) uwrp1
 */

참고

DBMS(예: MSSQL 및 Oracle)에 대한 올바른 작업을 위해 쿼리는 SELECT * FROM ( ... ) alias로 래핑됩니다. 기본 쿼리는 항상 uwrp0의 별칭을 갖습니다. union()를 통해 추가된 각 후속 쿼리에는 uwrpN+1 별칭이 있습니다.

모든 통합 쿼리는 union() 메서드가 호출된 순서에 관계없이 기본 쿼리 뒤에 추가됩니다. 즉, limit() 또는 orderBy() 메서드는 union() 이후에 호출되더라도 기본 쿼리를 기준으로 합니다.

경우에 따라 쿼리 결과의 레코드 수를 정렬하거나 제한하는 등의 작업이 필요할 수 있습니다. 해결책은 $db->newQuery()를 통해 생성된 래퍼를 사용하는 것입니다. 아래 예에서는 처음 5명의 사용자 + 마지막 5명의 사용자를 가져오고 ID를 기준으로 결과를 정렬합니다.

<?php

$union   = $db->table('users')->select('id, name')->orderBy('id', 'DESC')->limit(5);
$builder = $db->table('users')->select('id, name')->orderBy('id', 'ASC')->limit(5)->union($union);

$db->newQuery()->fromSubquery($builder, 'q')->orderBy('id', 'DESC')->get();
/*
 * Produces:
 * SELECT * FROM (
 *      SELECT * FROM (SELECT `id`, `name` FROM `users` ORDER BY `id` ASC LIMIT 5) uwrp0
 *      UNION
 *      SELECT * FROM (SELECT `id`, `name` FROM `users` ORDER BY `id` DESC LIMIT 5) uwrp1
 * ) q ORDER BY `id` DESC
 */

$builder->unionAll()

동작은 union() 메서드와 동일합니다. 그러나 고유한 결과뿐만 아니라 모든 결과가 반환됩니다.

쿼리 그룹화

그룹

쿼리 그룹화를 사용하면 WHERE 절을 괄호로 묶어 그룹을 생성할 수 있습니다. 이렇게 하면 복잡한 WHERE 절을 사용하여 쿼리를 생성할 수 있습니다. 중첩된 그룹이 지원됩니다. 예:

<?php

$builder->select('*')->from('my_table')
    ->groupStart()
        ->where('a', 'a')
        ->orGroupStart()
            ->where('b', 'b')
            ->where('c', 'c')
        ->groupEnd()
    ->groupEnd()
    ->where('d', 'd')
    ->get();
/*
 * Generates:
 * SELECT * FROM (`my_table`) WHERE ( `a` = 'a' OR ( `b` = 'b' AND `c` = 'c' ) ) AND `d` = 'd'
 */

참고

그룹은 균형을 이루어야 하며, 모든 groupStart()groupEnd()와 일치하는지 확인하세요.

$builder->groupStart()

쿼리의 WHERE 절에 여는 괄호를 추가하여 새 그룹을 시작합니다.

$builder->orGroupStart()

쿼리의 WHERE 절에 여는 괄호를 추가하고 앞에 OR을 추가하여 새 그룹을 시작합니다.

$builder->notGroupStart()

쿼리의 WHERE 절에 여는 괄호를 추가하고 앞에 NOT을 추가하여 새 그룹을 시작합니다.

$builder->orNotGroupStart()

쿼리의 WHERE 절에 여는 괄호를 추가하고 앞에 OR NOT을 추가하여 새 그룹을 시작합니다.

$builder->groupEnd()

쿼리의 WHERE 절에 닫는 괄호를 추가하여 현재 그룹을 종료합니다.

$builder->havingGroupStart()

쿼리의 HAVING 절에 여는 괄호를 추가하여 새 그룹을 시작합니다.

$builder->orHavingGroupStart()

쿼리의 HAVING 절에 여는 괄호를 추가하고 앞에 OR을 추가하여 새 그룹을 시작합니다.

$builder->notHavingGroupStart()

쿼리의 HAVING 절에 여는 괄호를 추가하고 앞에 NOT을 추가하여 새 그룹을 시작합니다.

$builder->orNotHavingGroupStart()

쿼리의 HAVING 절에 여는 괄호를 추가하고 앞에 OR NOT을 추가하여 새 그룹을 시작합니다.

$builder->havingGroupEnd()

쿼리의 HAVING 절에 닫는 괄호를 추가하여 현재 그룹을 종료합니다.

데이터 삽입

삽입

$builder->insert()

제공한 데이터를 기반으로 삽입 문자열을 생성하고 쿼리를 실행합니다. 배열또는 객체를 메서드에 전달할 수 있습니다. 다음은 배열을 사용하는 예입니다.

<?php

use CodeIgniter\Database\RawSql;

$data = [
    'id'          => new RawSql('DEFAULT'),
    'title'       => 'My title',
    'name'        => 'My Name',
    'date'        => '2022-01-01',
    'last_update' => new RawSql('CURRENT_TIMESTAMP()'),
];

$builder->insert($data);
/* Produces:
    INSERT INTO mytable (id, title, name, date, last_update)
    VALUES (DEFAULT, 'My title', 'My name', '2022-01-01', CURRENT_TIMESTAMP())
*/

첫 번째 매개변수는 값의 연관 배열입니다.

참고

RawSql를 제외한 모든 값은 자동으로 이스케이프되어 더 안전한 쿼리를 생성합니다.

경고

RawSql를 사용하는 경우 데이터를 수동으로 이스케이프해야 합니다. 그렇지 않으면 SQL 주입이 발생할 수 있습니다.

다음은 객체를 사용하는 예입니다.

<?php

namespace App\Libraries;

class MyClass
{
    public $title   = 'My Title';
    public $content = 'My Content';
    public $date    = 'My Date';
}
<?php

use App\Libraries\MyClass;

$object = new MyClass();
$builder->insert($object);
// Produces: INSERT INTO mytable (title, content, date) VALUES ('My Title', 'My Content', 'My Date')

첫 번째 매개변수는 객체입니다.

$builder->ignore()

제공한 데이터를 기반으로 삽입 무시 문자열을 생성하고 쿼리를 실행합니다. 따라서 동일한 기본 키를 가진 항목이 이미 존재하는 경우 쿼리가 삽입되지 않습니다. 선택적으로 불리언 값을 메서드에 전달할 수 있습니다. insertBatch, update 및 delete(지원되는 경우)에도 사용할 수 있습니다. 다음은 위 예제의 배열을 사용하는 예제입니다.

<?php

$data = [
    'title' => 'My title',
    'name'  => 'My Name',
    'date'  => 'My date',
];

$builder->ignore(true)->insert($data);
// Produces: INSERT OR IGNORE INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')

$builder->getCompiledInsert()

삽입 쿼리를 컴파일하지만 쿼리를 실행하지는 않습니다. 이 메서드는 단순히 SQL 쿼리를 문자열로 반환합니다.

예:

<?php

$data = [
    'title' => 'My title',
    'name'  => 'My Name',
    'date'  => 'My date',
];

$sql = $builder->set($data)->getCompiledInsert();
echo $sql;
// Produces string: INSERT INTO mytable (`title`, `name`, `date`) VALUES ('My title', 'My name', 'My date')

첫 번째 매개변수를 사용하면 쿼리 빌더 쿼리를 재설정할지 여부를 설정할 수 있습니다(기본적으로 $builder->insert()와 같습니다).

<?php

echo $builder->set('title', 'My Title')->getCompiledInsert(false);
// Produces string: INSERT INTO mytable (`title`) VALUES ('My Title')

echo $builder->set('content', 'My Content')->getCompiledInsert();
// Produces string: INSERT INTO mytable (`title`, `content`) VALUES ('My Title', 'My Content')

두 번째 쿼리가 작동한 이유는 첫 번째 매개변수가 false로 설정되었기 때문입니다.

참고

이 메서드는 일괄 삽입에는 작동하지 않습니다.

insertBatch

$builder->insertBatch()

데이터에서 삽입

제공한 데이터를 기반으로 삽입 문자열을 생성하고 쿼리를 실행합니다. 배열또는 객체를 메서드에 전달할 수 있습니다. 다음은 배열을 사용하는 예입니다.

<?php

$data = [
    [
        'title' => 'My title',
        'name'  => 'My Name',
        'date'  => 'My date',
    ],
    [
        'title' => 'Another title',
        'name'  => 'Another Name',
        'date'  => 'Another date',
    ],
];

$builder->insertBatch($data);
/*
 * Produces:
 * INSERT INTO mytable (title, name, date)
 *      VALUES ('My title', 'My name', 'My date'),
 *      ('Another title', 'Another name', 'Another date')
 */

첫 번째 매개변수는 값의 연관 배열입니다.

참고

RawSql를 제외한 모든 값은 자동으로 이스케이프되어 더 안전한 쿼리를 생성합니다.

경고

RawSql를 사용하는 경우 데이터를 수동으로 이스케이프해야 합니다. 그렇지 않으면 SQL 주입이 발생할 수 있습니다.

쿼리에서 삽입

쿼리에서 삽입할 수도 있습니다.

<?php

use CodeIgniter\Database\RawSql;

$query = 'SELECT user2.name, user2.email, user2.country
          FROM user2
          LEFT JOIN user ON user.email = user2.email
          WHERE user.email IS NULL';

$sql = $builder
    ->ignore(true)
    ->setQueryAsData(new RawSql($query), null, 'name, country, email')
    ->insertBatch();
/* MySQLi produces:
    INSERT IGNORE INTO `db_user` (`name`, `country`, `email`)
    SELECT user2.name, user2.email, user2.country
    FROM user2
    LEFT JOIN user ON user.email = user2.email
    WHERE user.email IS NULL
*/

참고

setQueryAsData() v4.3.0부터 사용할 수 있습니다.

참고

대상 테이블의 열과 일치하도록 선택 쿼리의 열에 별칭을 지정해야 합니다.

데이터 Upsert

Upsert

$builder->upsert()

Added in version 4.3.0.

제공한 데이터를 기반으로 upsert 문자열을 생성하고 쿼리를 실행합니다. 배열또는 객체를 메서드에 전달할 수 있습니다. 기본적으로 제약 조건은 순서대로 정의됩니다. 기본 키가 먼저 선택된 다음 고유 키가 선택됩니다. MySQL은 기본적으로 모든 제약 조건을 사용합니다. 다음은 배열을 사용하는 예입니다.

<?php

$data = [
    'email'   => 'ahmadinejad@example.com',
    'name'    => 'Ahmadinejad',
    'country' => 'Iran',
];

$builder->upsert($data);
// MySQLi  produces: INSERT INTO.. ON DUPLICATE KEY UPDATE..
// Postgre produces: INSERT INTO.. ON CONFLICT.. DO UPDATE..
// SQLite3 produces: INSERT INTO.. ON CONFLICT.. DO UPDATE..
// SQLSRV  produces: MERGE INTO.. WHEN MATCHED THEN UPDATE.. WHEN NOT MATCHED THEN INSERT..
// OCI8    produces: MERGE INTO.. WHEN MATCHED THEN UPDATE.. WHEN NOT MATCHED THEN INSERT..

참고

MySQL 이외의 데이터베이스의 경우 테이블에 여러 키(기본 또는 고유)가 있는 경우 제약 조건을 처리할 때 기본 키가 기본적으로 우선순위가 지정됩니다. 기본 키 대신 다른 고유 키를 사용하려면 onConstraint() 메서드를 사용하세요.

첫 번째 매개변수는 값의 연관 배열입니다.

다음은 객체를 사용하는 예입니다.

<?php

namespace App\Libraries;

class MyClass
{
    public $email   = 'ahmadinejad@example.com';
    public $name    = 'Ahmadinejad';
    public $country = 'Iran';
}
<?php

use App\Libraries\MyClass;

$object = new MyClass();
$builder->upsert($object);

첫 번째 매개변수는 객체입니다.

참고

모든 값은 자동으로 이스케이프되어 더 안전한 쿼리를 생성합니다.

$builder->getCompiledUpsert()

Added in version 4.3.0.

upsert 쿼리를 컴파일하지만 쿼리를 실행하지는 않습니다. 이 메서드는 단순히 SQL 쿼리를 문자열로 반환합니다.

예:

<?php

$data = [
    'email'   => 'ahmadinejad@example.com',
    'name'    => 'Ahmadinejad',
    'country' => 'Iran',
];

$sql = $builder->setData($data)->getCompiledUpsert();
echo $sql;
/* MySQLi produces:
    INSERT INTO `db_user` (`country`, `email`, `name`)
    VALUES ('Iran','ahmadinejad@example.com','Ahmadinejad')
    ON DUPLICATE KEY UPDATE
    `country` = VALUES(`country`),
    `email` = VALUES(`email`),
    `name` = VALUES(`name`)
*/

참고

이 메서드는 일괄 upsert에는 작동하지 않습니다.

upsertBatch

$builder->upsertBatch()

Added in version 4.3.0.

데이터에서 Upsert

제공한 데이터를 기반으로 upsert 문자열을 생성하고 쿼리를 실행합니다. 배열또는 객체를 메서드에 전달할 수 있습니다. 기본적으로 제약 조건은 순서대로 정의됩니다. 기본 키가 먼저 선택된 다음 고유 키가 선택됩니다. MySQL은 기본적으로 모든 제약 조건을 사용합니다.

다음은 배열을 사용하는 예입니다.

<?php

$data = [
    [
        'id'      => 2,
        'email'   => 'ahmadinejad@example.com',
        'name'    => 'Ahmadinejad',
        'country' => 'Iran',
    ],
    [
        'id'      => null,
        'email'   => 'pedro@example.com',
        'name'    => 'Pedro',
        'country' => 'El Salvador',
    ],
];

$builder->upsertBatch($data);
// MySQLi  produces: INSERT INTO.. ON DUPLICATE KEY UPDATE..
// Postgre produces: INSERT INTO.. ON CONFLICT.. DO UPDATE..
// SQLite3 produces: INSERT INTO.. ON CONFLICT.. DO UPDATE..
// SQLSRV  produces: MERGE INTO.. WHEN MATCHED THEN UPDATE.. WHEN NOT MATCHED THEN INSERT..
// OCI8    produces: MERGE INTO.. WHEN MATCHED THEN UPDATE.. WHEN NOT MATCHED THEN INSERT..

첫 번째 매개변수는 값의 연관 배열입니다.

참고

모든 값은 자동으로 이스케이프되어 더 안전한 쿼리를 생성합니다.

쿼리에서 Upsert

쿼리에서 upsert할 수도 있습니다.

<?php

use CodeIgniter\Database\RawSql;

$query = $this->db->table('user2')
    ->select('user2.name, user2.email, user2.country')
    ->join('user', 'user.email = user2.email', 'left')
    ->where('user.email IS NULL');

$additionalUpdateField = ['updated_at' => new RawSql('CURRENT_TIMESTAMP')];

$sql = $builder->setQueryAsData($query)
    ->onConstraint('email')
    ->updateFields($additionalUpdateField, true)
    ->upsertBatch();
/* MySQLi produces:
    INSERT INTO `db_user` (`country`, `email`, `name`)
    SELECT user2.name, user2.email, user2.country
    FROM user2
    LEFT JOIN user ON user.email = user2.email
    WHERE user.email IS NULL
    ON DUPLICATE KEY UPDATE
    `country` = VALUES(`country`),
    `email` = VALUES(`email`),
    `name` = VALUES(`name`),
    `updated_at` = CURRENT_TIMESTAMP
*/

참고

setQueryAsData(), onConstraint(), updateFields() 메서드는 v4.3.0부터 사용할 수 있습니다.

참고

대상 테이블의 열과 일치하도록 선택 쿼리의 열에 별칭을 지정해야 합니다.

$builder->onConstraint()

Added in version 4.3.0.

upsert에 사용되는 제약 조건을 수동으로 설정할 수 있습니다. MySQL은 기본적으로 모든 제약 조건을 확인하므로 이는 MySQL에서는 작동하지 않습니다.

<?php

$data = [
    'id'      => 2,
    'email'   => 'ahmadinejad@example.com',
    'name'    => 'Ahmadinejad',
    'country' => 'Iran',
];

$builder->onConstraint('email')->upsert($data);
/* Postgre produces:
    INSERT INTO "db_user"("country", "email", "id", "name")
    VALUES ('Iran','ahmadinejad@example.com',2,'Ahmadinejad')
    ON CONFLICT("email")
    DO UPDATE SET
    "country" = "excluded"."country",
    "id" = "excluded"."id",
    "name" = "excluded"."name"
*/

이 메서드는 문자열 또는 열 배열을 허용합니다.

$builder->updateFields()

Added in version 4.3.0.

Upsert를 수행할 때 업데이트할 필드를 수동으로 설정할 수 있습니다.

<?php

$data = [
    'id'      => 2,
    'email'   => 'ahmadinejad@example.com',
    'name'    => 'Ahmadinejad Zaghari',
    'country' => 'Afghanistan',
];

$builder->updateFields('name, country')->setData($data, null, '_upsert')->upsert();
/* SQLSRV produces:
    MERGE INTO "test"."dbo"."db_user"
    USING (
     VALUES ('Iran','ahmadinejad@example.com',2,'Ahmadinejad')
    ) "_upsert" ("country", "email", "id", "name")
    ON ("test"."dbo"."db_user"."id" = "_upsert"."id")
    WHEN MATCHED THEN UPDATE SET
    "country" = "_upsert"."country",
    "name" = "_upsert"."name"
    WHEN NOT MATCHED THEN INSERT ("country", "email", "id", "name")
    VALUES ("_upsert"."country", "_upsert"."email", "_upsert"."id", "_upsert"."name");
*/

이 메서드는 문자열, 열 배열 또는 RawSql을 허용합니다. 데이터 세트에 포함되지 않은 업데이트할 추가 열을 지정할 수도 있습니다. 이는 두 번째 매개변수를 true로 설정하여 수행할 수 있습니다.

<?php

use CodeIgniter\Database\RawSql;

$data = [
    [
        'id'      => 2,
        'email'   => 'ahmadinejad@example.com',
        'name'    => 'Ahmadinejad',
        'country' => 'Iran',
    ],
    [
        'id'      => null,
        'email'   => 'pedro@example.com',
        'name'    => 'Pedro',
        'country' => 'El Salvador',
    ],
];

$additionalUpdateField = ['updated_at' => new RawSql('CURRENT_TIMESTAMP')];

$sql = $builder->setData($data)->updateFields($additionalUpdateField, true)->upsertBatch();
/* MySQLi produces:
    INSERT INTO `db_user` (`country`, `email`, `name`)
    VALUES ('Iran','ahmadinejad@example.com','Ahmadinejad'),('El Salvador','pedro@example.com','Pedro')
    ON DUPLICATE KEY UPDATE
    `country` = VALUES(`country`),
    `email` = VALUES(`email`),
    `name` = VALUES(`name`),
    `updated_at` = CURRENT_TIMESTAMP
*/

updated_at 필드는 삽입되지 않고 업데이트 시 사용됩니다.

데이터 업데이트

업데이트

$builder->replace()

이 메서드는 PRIMARYUNIQUE 키를 결정 요인으로 사용하여 기본적으로 (선택적) DELETE + INSERT에 대한 SQL 표준인 REPLACE 문을 실행합니다. 이를 통해 select(), update(), delete()insert() 호출의 다양한 조합으로 복잡한 로직을 구현할 필요가 없습니다.

예:

<?php

$data = [
    'title' => 'My title',
    'name'  => 'My Name',
    'date'  => 'My date',
];

$builder->replace($data);
// Executes: REPLACE INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')

위의 예에서 title 필드가 기본 키라고 가정하면 My title 값이 title 값으로 포함된 행이 삭제되고 새 행 데이터가 대체됩니다.

set() 메서드 사용도 허용되며 insert()와 마찬가지로 모든 값이 자동으로 이스케이프됩니다.

$builder->set()

이 메서드를 사용하면 삽입 또는 업데이트에 대한 값을 설정할 수 있습니다.

데이터 배열을 insert() 또는 update() 메서드에 직접 전달하는 대신 사용할 수 있습니다.

<?php

$builder->set('name', $name);
$builder->insert();
// Produces: INSERT INTO mytable (`name`) VALUES ('{$name}')

여러 메서드를 사용하면 삽입을 수행하는지 업데이트를 수행하는지에 따라 적절하게 어셈블됩니다.

<?php

$builder->set('name', $name);
$builder->set('title', $title);
$builder->set('status', $status);
$builder->insert();

set()는 선택적인 세 번째 매개변수($escape)도 허용합니다. 이는 false로 설정된 경우 값이 이스케이프되는 것을 방지합니다. 차이점을 설명하기 위해 여기에서는 escape 매개변수를 사용하거나 사용하지 않고 사용되는 set()가 있습니다.

<?php

$builder->set('field', 'field+1', false);
$builder->where('id', 2);
$builder->update();
// gives UPDATE mytable SET field = field+1 WHERE `id` = 2

$builder->set('field', 'field+1');
$builder->where('id', 2);
$builder->update();
// gives UPDATE `mytable` SET `field` = 'field+1' WHERE `id` = 2

이 메서드에 연관 배열을 전달할 수도 있습니다.

<?php

$array = [
    'name'   => $name,
    'title'  => $title,
    'status' => $status,
];

$builder->set($array);
$builder->insert();

또는 객체:

<?php

namespace App\Libraries;

class MyClass
{
    public $title   = 'My Title';
    public $content = 'My Content';
    public $date    = 'My Date';
}
<?php

use App\Libraries\MyClass;

$object = new MyClass();
$builder->set($object);
$builder->insert();

$builder->update()

업데이트 문자열을 생성하고 제공한 데이터를 기반으로 쿼리를 실행합니다. 배열또는 객체를 메서드에 전달할 수 있습니다. 다음은 배열을 사용하는 예입니다.

<?php

$data = [
    'title' => $title,
    'name'  => $name,
    'date'  => $date,
];

$builder->where('id', $id);
$builder->update($data);
/*
 * Produces:
 * UPDATE mytable
 * SET title = '{$title}', name = '{$name}', date = '{$date}'
 * WHERE id = $id
 */

또는 객체를 제공할 수 있습니다.

<?php

namespace App\Libraries;

class MyClass
{
    public $title   = 'My Title';
    public $content = 'My Content';
    public $date    = 'My Date';
}
<?php

use App\Libraries\MyClass;

$object = new MyClass();
$builder->where('id', $id);
$builder->update($object);
/*
 * Produces:
 * UPDATE `mytable`
 * SET `title` = '{$title}', `content` = '{$content}', `date` = '{$date}'
 * WHERE id = `$id`
 */

참고

RawSql를 제외한 모든 값은 자동으로 이스케이프되어 더 안전한 쿼리를 생성합니다.

경고

RawSql를 사용하는 경우 데이터를 수동으로 이스케이프해야 합니다. 그렇지 않으면 SQL 주입이 발생할 수 있습니다.

WHERE 절을 설정할 수 있는 $builder->where() 메서드를 사용하는 것을 볼 수 있습니다. 선택적으로 이 정보를 update() 메서드에 문자열로 직접 전달할 수 있습니다.

<?php

$builder->update($data, 'id = 4');

또는 배열로:

<?php

$builder->update($data, ['id' => $id]);

업데이트를 수행할 때 위에서 설명한 $builder->set() 메서드를 사용할 수도 있습니다.

$builder->getCompiledUpdate()

이는 INSERT SQL 문자열 대신 UPDATE SQL 문자열을 생성한다는 점을 제외하면 $builder->getCompiledInsert()와 정확히 동일한 방식으로 작동합니다.

자세한 내용은 $builder->getCompiledInsert()에 대한 문서를 참조하세요.

참고

이 메서드는 일괄 업데이트에는 작동하지 않습니다.

UpdateBatch

$builder->updateBatch()

참고

v4.3.0부터 updateBatch()의 두 번째 매개변수 $index$constraints로 변경되었습니다. 이제 배열, 문자열 또는 RawSql 유형을 허용합니다.

데이터에서 업데이트

제공한 데이터를 기반으로 업데이트 문자열을 생성하고 쿼리를 실행합니다. 배열또는 객체를 메서드에 전달할 수 있습니다. 다음은 배열을 사용하는 예입니다.

<?php

$data = [
    [
        'title'  => 'Title 1',
        'author' => 'Author 1',
        'name'   => 'Name 1',
        'date'   => 'Date 1',
    ],
    [
        'title'  => 'Title 2',
        'author' => 'Author 2',
        'name'   => 'Name 2',
        'date'   => 'Date 2',
    ],
];
$builder->updateBatch($data, ['title', 'author']);
/*
 * Produces:
 * UPDATE `mytable`
 * INNER JOIN (
 * SELECT 'Title 1' `title`, 'Author 1' `author`, 'Name 1' `name`, 'Date 1' `date` UNION ALL
 * SELECT 'Title 2' `title`, 'Author 2' `author`, 'Name 2' `name`, 'Date 2' `date`
 * ) `u`
 * ON `mytable`.`title` = `u`.`title` AND `mytable`.`author` = `u`.`author`
 * SET
 * `mytable`.`title` = `u`.`title`,
 * `mytable`.`name` = `u`.`name`,
 * `mytable`.`date` = `u`.`date`
 */

첫 번째 매개변수는 값의 연관 배열이고, 두 번째 매개변수는 where 키입니다.

참고

v4.3.0부터 생성되는 SQL 구조가 개선되었습니다.

v4.3.0부터 onConstraint()updateFields() 메서드를 사용할 수도 있습니다.

<?php

use CodeIgniter\Database\RawSql;

$builder->setData($data)->onConstraint('title, author')->updateBatch();

// OR
$builder->setData($data, null, 'u')
    ->onConstraint(['`mytable`.`title`' => '`u`.`title`', 'author' => new RawSql('`u`.`author`')])
    ->updateBatch();

// OR
foreach ($data as $row) {
    $builder->setData($row);
}
$builder->onConstraint('title, author')->updateBatch();

// OR
$builder->setData($data, true, 'u')
    ->onConstraint(new RawSql('`mytable`.`title` = `u`.`title` AND `mytable`.`author` = `u`.`author`'))
    ->updateFields(['last_update' => new RawSql('CURRENT_TIMESTAMP()')], true)
    ->updateBatch();
/*
 * Produces:
 * UPDATE `mytable`
 * INNER JOIN (
 * SELECT 'Title 1' `title`, 'Author 1' `author`, 'Name 1' `name`, 'Date 1' `date` UNION ALL
 * SELECT 'Title 2' `title`, 'Author 2' `author`, 'Name 2' `name`, 'Date 2' `date`
 * ) `u`
 * ON `mytable`.`title` = `u`.`title` AND `mytable`.`author` = `u`.`author`
 * SET
 * `mytable`.`title` = `u`.`title`,
 * `mytable`.`name` = `u`.`name`,
 * `mytable`.`date` = `u`.`date`,
 * `mytable`.`last_update` = CURRENT_TIMESTAMP() // this only applies to the last scenario
 */

참고

RawSql를 제외한 모든 값은 자동으로 이스케이프되어 더 안전한 쿼리를 생성합니다.

경고

RawSql를 사용하는 경우 데이터를 수동으로 이스케이프해야 합니다. 그렇지 않으면 SQL 주입이 발생할 수 있습니다.

참고

affectedRows()는 이 메서드의 작동 방식 특성으로 인해 올바른 결과를 제공하지 않습니다. 대신, updateBatch()는 영향을 받은 행 수를 반환합니다.

쿼리에서 업데이트

v4.3.0부터 setQueryAsData() 메서드를 사용하여 쿼리에서 업데이트할 수도 있습니다.

<?php

use CodeIgniter\Database\RawSql;

$query = $this->db->table('user2')
    ->select('user2.name, user2.email, user2.country')
    ->join('user', 'user.email = user2.email', 'inner')
    ->where('user2.country', 'US');

$additionalUpdateField = ['updated_at' => new RawSql('CURRENT_TIMESTAMP')];

$sql = $builder->table('user')
    ->setQueryAsData($query, null, 'u')
    ->onConstraint('email')
    ->updateFields($additionalUpdateField, true)
    ->updateBatch();
/*
 * Produces:
 * UPDATE `user`
 * INNER JOIN (
 * SELECT user2.name, user2.email, user2.country
 * FROM user2
 * INNER JOIN user ON user.email = user2.email
 * WHERE user2.country = 'US'
 * ) `u`
 * ON `user`.`email` = `u`.`email`
 * SET
 * `mytable`.`name` = `u`.`name`,
 * `mytable`.`email` = `u`.`email`,
 * `mytable`.`country` = `u`.`country`,
 * `mytable`.`updated_at` = CURRENT_TIMESTAMP()
 */

참고

대상 테이블의 열과 일치하도록 선택 쿼리의 열에 별칭을 지정해야 합니다.

데이터 삭제

삭제

$builder->delete()

DELETE SQL 문자열을 생성하고 쿼리를 실행합니다.

<?php

$builder->delete(['id' => $id]);
// Produces: DELETE FROM mytable WHERE id = $id

첫 번째 매개변수는 where 절입니다. 메서드의 첫 번째 매개변수에 데이터를 전달하는 대신 where() 또는 orWhere() 메서드를 사용할 수도 있습니다.

<?php

$builder->where('id', $id);
$builder->delete();
/*
 * Produces:
 * DELETE FROM mytable
 * WHERE id = $id
 */

테이블에서 모든 데이터를 삭제하려면 truncate() 메서드나 emptyTable()을 사용할 수 있습니다.

$builder->getCompiledDelete()

이는 INSERT SQL 문자열 대신 DELETE SQL 문자열을 생성한다는 점을 제외하면 $builder->getCompiledInsert()와 정확히 동일한 방식으로 작동합니다.

자세한 내용은 $builder->getCompiledInsert()에 대한 문서를 참조하세요.

일괄 삭제

$builder->deleteBatch()

Added in version 4.3.0.

데이터에서 삭제

데이터 세트를 기반으로 배치 DELETE 문을 생성합니다.

<?php

$data = [
    [
        'order'   => 48372,
        'line'    => 3,
        'product' => 'Keyboard',
        'qty'     => 1,
    ],
    [
        'order'   => 48372,
        'line'    => 4,
        'product' => 'Mouse',
        'qty'     => 1,
    ],
    [
        'order'   => 48372,
        'line'    => 5,
        'product' => 'Monitor',
        'qty'     => 2,
    ],
];

$builder->setData($data, true, 'del')
    ->onConstraint('order, line')
    ->where('del.qty >', 1)
    ->deleteBatch();

/*
 * MySQL Produces:
 * DELETE `order_line` FROM `order_line`
 * INNER JOIN (
 * SELECT 3 `line`, 48372 `order`, 'Keyboard' `product`, 1 `qty` UNION ALL
 * SELECT 4 `line`, 48372 `order`, 'Mouse'    `product`, 1 `qty` UNION ALL
 * SELECT 5 `line`, 48372 `order`, 'Monitor'  `product`, 2 `qty`
 * ) `del`
 * ON `order_line`.`order` = `del`.`order` AND `order_line`.`line` = `del`.`line`
 * WHERE `del`.`qty` > 1
 */

이 메서드는 복합 기본 키가 있는 테이블에서 데이터를 삭제할 때 특히 유용합니다.

참고

SQLite3은 where() 사용을 지원하지 않습니다.

쿼리에서 삭제

쿼리에서 삭제할 수도 있습니다.

<?php

use CodeIgniter\Database\RawSql;

$query = $this->db->table('user2')->select('email, name, country')->where('country', 'Greece');

$this->db->table('user')
    ->setQueryAsData($query, 'alias')
    ->onConstraint('email')
    ->where('alias.name = user.name')
    ->deleteBatch();

/* MySQLi produces:
    DELETE `user` FROM `user`
    INNER JOIN (
    SELECT `email`, `name`, `country`
    FROM `user2`
    WHERE `country` = 'Greece') `alias`
    ON `user`.`email` = `alias`.`email`
    WHERE `alias`.`name` = `user`.`name`
*/

$builder->emptyTable()

DELETE SQL 문자열을 생성하고 쿼리를 실행합니다.

<?php

$builder->emptyTable('mytable');
// Produces: DELETE FROM mytable

$builder->truncate()

TRUNCATE SQL 문자열을 생성하고 쿼리를 실행합니다.

<?php

$builder->truncate();
/*
 * Produce:
 * TRUNCATE mytable
 */

참고

TRUNCATE 명령을 사용할 수 없는 경우 truncate()는 “DELETE FROM table”로 실행됩니다.

조건문

When

$builder->when()

Added in version 4.3.0.

이를 통해 쿼리 빌더 체인을 중단하지 않고도 조건에 따라 쿼리를 수정할 수 있습니다. 첫 번째 매개변수는 조건이며 PHP의 기본 부울 논리를 사용하여 평가됩니다. 즉, false, null, 0, '0', 0.0, 빈 문자열 '' 및 빈 배열 []과 같은 값은 false로 간주됩니다. 두 번째 매개변수는 조건이 true일 때 실행되는 콜백입니다.

예를 들어, HTTP 요청 내에서 전송된 값을 기반으로 지정된 WHERE 문만 적용하려고 할 수 있습니다.

<?php

$status = service('request')->getPost('status');

$users = $this->db->table('users')
    ->when($status, static function ($query, $status) {
        $query->where('status', $status);
    })
    ->get();

조건은 true로 평가되므로 콜백이 호출됩니다. 조건에 설정된 값은 쿼리에서 사용할 수 있도록 콜백에 두 번째 매개변수로 전달됩니다.

때로는 조건이 false로 평가되는 경우 다른 명령문을 적용하고 싶을 수도 있습니다. 이는 두 번째 클로저를 제공하여 수행할 수 있습니다.

<?php

$onlyInactive = service('request')->getPost('return_inactive');

$users = $this->db->table('users')
    ->when($onlyInactive, static function ($query, $onlyInactive) {
        $query->where('status', 'inactive');
    }, static function ($query) {
        $query->where('status', 'active');
    })
    ->get();

WhenNot

$builder->whenNot()

Added in version 4.3.0.

이는 when()처럼 true 대신 조건이 false로 평가될 때만 콜백을 실행한다는 점을 제외하면 $builder->when()와 정확히 같은 방식으로 작동합니다.

<?php

$status = service('request')->getPost('status');

$users = $this->db->table('users')
    ->whenNot($status, static function ($query, $status) {
        $query->where('active', 0);
    })
    ->get();

메서드 체이닝

메서드 체이닝을 사용하면 여러 메서드를 연결하여 구문을 단순화할 수 있습니다. 다음 예를 살펴보세요.

<?php

$query = $builder->select('title')
    ->where('id', $id)
    ->limit(10, 20)
    ->get();

쿼리 빌더 재설정

ResetQuery

$builder->resetQuery()

쿼리 빌더를 재설정하면 $builder->get() 또는 $builder->insert()와 같은 메서드를 사용하여 먼저 쿼리를 실행하지 않고도 쿼리를 새로 시작할 수 있습니다.

이는 쿼리 빌더를 사용하여 SQL(예: $builder->getCompiledSelect())을 생성한 다음 쿼리를 실행하도록 선택하는 경우에 유용합니다.

<?php

// Note that the parameter of the `getCompiledSelect()` method is false
$sql = $builder->select(['field1', 'field2'])
    ->where('field3', 5)
    ->getCompiledSelect(false);

// ...
// Do something crazy with the SQL code... like add it to a cron script for
// later execution or something...
// ...

$data = $builder->get()->getResultArray();
/*
 * Would execute and return an array of results of the following query:
 * SELECT field1, field2 FROM mytable WHERE field3 = 5;
 */

클래스 참조

class CodeIgniter\Database\BaseBuilder
db()
반환:

사용 중인 데이터베이스 연결

반환 형식:

ConnectionInterface

$db에서 현재 데이터베이스 연결을 반환합니다. insertID() 또는 errors()와 같이 쿼리 빌더에서 직접 사용할 수 없는 ConnectionInterface 메서드에 액세스하는 데 유용합니다.

resetQuery()
반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

현재 쿼리 빌더 상태를 재설정합니다. 특정 조건에서 취소할 수 있는 쿼리를 작성하려는 경우 유용합니다.

countAllResults([$reset = true])
매개변수:
  • $reset (bool) – SELECT 값을 재설정할지 여부

반환:

쿼리 결과의 행 수

반환 형식:

int

쿼리 빌더 쿼리에서 반환된 모든 레코드를 계산하는 플랫폼별 쿼리 문자열을 생성합니다.

countAll([$reset = true])
매개변수:
  • $reset (bool) – SELECT 값을 재설정할지 여부

반환:

쿼리 결과의 행 수

반환 형식:

int

특정 테이블의 모든 레코드 수를 계산하는 플랫폼별 쿼리 문자열을 생성합니다.

get([$limit = null[, $offset = null[, $reset = true]]]])
매개변수:
  • $limit (int) – LIMIT 절

  • $offset (int) – OFFSET 절

  • $reset (bool) – 쿼리 빌더 값을 초기화할지 여부

반환:

\CodeIgniter\Database\ResultInterface 인스턴스(메서드 체이닝)

반환 형식:

\CodeIgniter\Database\ResultInterface

이미 호출된 쿼리 빌더 메서드를 기반으로 SELECT 문을 컴파일하고 실행합니다.

getWhere([$where = null[, $limit = null[, $offset = null[, $reset = true]]]]])
매개변수:
  • $where (string) – WHERE 절

  • $limit (int) – LIMIT 절

  • $offset (int) – OFFSET 절

  • $reset (bool) – 쿼리 빌더 값을 초기화할지 여부

반환:

\CodeIgniter\Database\ResultInterface 인스턴스(메서드 체이닝)

반환 형식:

\CodeIgniter\Database\ResultInterface

get()와 동일하지만 WHERE를 직접 추가할 수도 있습니다.

select([$select = '*'[, $escape = null]])
매개변수:
  • $select (array|RawSql|string) – 쿼리의 SELECT 부분

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리에 SELECT 절을 추가합니다.

selectAvg([$select = ''[, $alias = '']])
매개변수:
  • $select (string) – 평균을 계산하는 필드

  • $alias (string) – 결과 값 이름의 별칭

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리에 SELECT AVG(field) 절을 추가합니다.

selectMax([$select = ''[, $alias = '']])
매개변수:
  • $select (string) – 최대값을 계산할 필드

  • $alias (string) – 결과 값 이름의 별칭

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리에 SELECT MAX(field) 절을 추가합니다.

selectMin([$select = ''[, $alias = '']])
매개변수:
  • $select (string) – 최소값을 계산하는 필드

  • $alias (string) – 결과 값 이름의 별칭

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리에 SELECT MIN(field) 절을 추가합니다.

selectSum([$select = ''[, $alias = '']])
매개변수:
  • $select (string) – 합계를 계산하는 필드

  • $alias (string) – 결과 값 이름의 별칭

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리에 SELECT SUM(field) 절을 추가합니다.

selectCount([$select = ''[, $alias = '']])
매개변수:
  • $select (string) – 평균을 계산하는 필드

  • $alias (string) – 결과 값 이름의 별칭

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리에 SELECT COUNT(field) 절을 추가합니다.

selectSubquery(BaseBuilder $subquery, string $as)
매개변수:
  • $subquery (string) – BaseBuilder의 인스턴스

  • $as (string) – 결과 값 이름의 별칭

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

선택 항목에 하위 쿼리를 추가합니다.

distinct([$val = true])
매개변수:
  • $val (bool) – “고유한” 플래그의 원하는 값

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리 빌더에게 쿼리의 SELECT 부분에 DISTINCT 절을 추가하도록 지시하는 플래그를 설정합니다.

from($from[, $overwrite = false])
매개변수:
  • $from (mixed) – 테이블 이름 문자열 또는 배열

  • $overwrite (bool) – 기존의 첫 번째 테이블을 제거할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리의 FROM 절을 지정합니다.

fromSubquery($from, $alias)
매개변수:
  • $from (BaseBuilder) – BaseBuilder 클래스의 인스턴스

  • $alias (string) – 하위 쿼리 별칭

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

하위 쿼리를 사용하여 쿼리의 FROM 절을 지정합니다.

setQueryAsData($query[, $alias[, $columns = null]])

Added in version 4.3.0.

매개변수:
  • $query (BaseBuilder|RawSql) – BaseBuilder 또는 RawSql의 인스턴스

  • $alias (string|null) – 쿼리 별칭

  • $columns (array|string|null) – 쿼리에 있는 열의 배열 또는 쉼표로 구분된 문자열

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

insertBatch(), updateBatch(), upsertBatch()에 대한 데이터 소스로 쿼리를 설정합니다. $columns가 null이면 쿼리가 실행되어 열 이름을 생성합니다.

join($table, $cond[, $type = ''[, $escape = null]])
매개변수:
  • $table (string) – 조인할 테이블 이름

  • $cond (string|RawSql) – JOIN ON 조건

  • $type (string) – JOIN 유형

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리에 JOIN 절을 추가합니다. v4.2.0부터 RawSql를 JOIN ON 조건으로 사용할 수 있습니다. $builder->join()도 참조하세요.

where($key[, $value = null[, $escape = null]])
매개변수:
  • $key (array|RawSql|string) – 비교할 필드 이름 또는 연관 배열

  • $value (mixed) – 단일 키인 경우 이 값과 비교

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리의 WHERE 부분을 생성합니다. 여러 호출을 AND로 구분합니다.

orWhere($key[, $value = null[, $escape = null]])
매개변수:
  • $key (mixed) – 비교할 필드 이름 또는 연관 배열

  • $value (mixed) – 단일 키인 경우 이 값과 비교

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리의 WHERE 부분을 생성합니다. 여러 호출을 OR로 구분합니다.

orWhereIn([$key = null[, $values = null[, $escape = null]]])
매개변수:
  • $key (string) – 검색할 필드

  • $values (array|BaseBulder|Closure) – 대상 값의 배열 또는 하위 쿼리를 위한 익명 함수

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

적절한 경우 OR와 결합된 WHERE 필드 IN('item', 'item') SQL 쿼리를 생성합니다.

orWhereNotIn([$key = null[, $values = null[, $escape = null]]])
매개변수:
  • $key (string) – 검색할 필드

  • $values (array|BaseBulder|Closure) – 대상 값의 배열 또는 하위 쿼리를 위한 익명 함수

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

적절한 경우 OR와 결합된 WHERE 필드 NOT IN('item', 'item') SQL 쿼리를 생성합니다.

whereIn([$key = null[, $values = null[, $escape = null]]])
매개변수:
  • $key (string) – 조사할 필드 이름

  • $values (array|BaseBulder|Closure) – 대상 값의 배열 또는 하위 쿼리를 위한 익명 함수

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

적절한 경우 AND와 결합된 WHERE 필드 IN('item', 'item') SQL 쿼리를 생성합니다.

whereNotIn([$key = null[, $values = null[, $escape = null]]])
매개변수:
  • $key (string) – 조사할 필드 이름

  • $values (array|BaseBulder|Closure) – 대상 값의 배열 또는 하위 쿼리를 위한 익명 함수

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

적절한 경우 AND와 결합된 WHERE 필드 NOT IN('item', 'item') SQL 쿼리를 생성합니다.

groupStart()
반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

내부 조건에 AND를 사용하여 그룹 표현식을 시작합니다.

orGroupStart()
반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

내부 조건에 OR를 사용하여 그룹 표현식을 시작합니다.

notGroupStart()
반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

내부 조건에 AND NOT를 사용하여 그룹 표현식을 시작합니다.

orNotGroupStart()
반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

내부 조건에 OR NOT를 사용하여 그룹 표현식을 시작합니다.

groupEnd()
반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

그룹 표현식을 종료합니다.

like($field[, $match = ''[, $side = 'both'[, $escape = null[, $insensitiveSearch = false]]]])
매개변수:
  • $field (array|RawSql|string) – 필드 이름

  • $match (string) – 일치시킬 텍스트 부분

  • $side (string) – ‘%’ 와일드카드를 표현식의 어느 쪽에 넣을지

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

  • $insensitiveSearch (bool) – 대소문자를 구분하지 않고 검색을 강제할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

LIKE 절을 쿼리에 추가하여 AND로 여러 호출을 구분합니다.

orLike($field[, $match = ''[, $side = 'both'[, $escape = null[, $insensitiveSearch = false]]]])
매개변수:
  • $field (string) – 필드 이름

  • $match (string) – 일치시킬 텍스트 부분

  • $side (string) – ‘%’ 와일드카드를 표현식의 어느 쪽에 넣을지

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

  • $insensitiveSearch (bool) – 대소문자를 구분하지 않고 검색을 강제할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리에 LIKE 절을 추가하여 OR로 여러 클래스를 구분합니다.

notLike($field[, $match = ''[, $side = 'both'[, $escape = null[, $insensitiveSearch = false]]]])
매개변수:
  • $field (string) – 필드 이름

  • $match (string) – 일치시킬 텍스트 부분

  • $side (string) – ‘%’ 와일드카드를 표현식의 어느 쪽에 넣을지

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

  • $insensitiveSearch (bool) – 대소문자를 구분하지 않고 검색을 강제할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

NOT LIKE 절을 쿼리에 추가하여 AND로 여러 호출을 구분합니다.

orNotLike($field[, $match = ''[, $side = 'both'[, $escape = null[, $insensitiveSearch = false]]]])
매개변수:
  • $field (string) – 필드 이름

  • $match (string) – 일치시킬 텍스트 부분

  • $side (string) – ‘%’ 와일드카드를 표현식의 어느 쪽에 넣을지

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

  • $insensitiveSearch (bool) – 대소문자를 구분하지 않고 검색을 강제할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

NOT LIKE 절을 쿼리에 추가하여 OR로 여러 호출을 구분합니다.

having($key[, $value = null[, $escape = null]])
매개변수:
  • $key (mixed) – 필드/값 쌍의 식별자(문자열) 또는 연관 배열

  • $value (string) – $key가 식별자인 경우 검색할 값

  • $escape (string) – 값과 식별자를 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

HAVING 절을 쿼리에 추가하여 AND로 여러 호출을 구분합니다.

orHaving($key[, $value = null[, $escape = null]])
매개변수:
  • $key (mixed) – 필드/값 쌍의 식별자(문자열) 또는 연관 배열

  • $value (string) – $key가 식별자인 경우 검색할 값

  • $escape (string) – 값과 식별자를 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

HAVING 절을 쿼리에 추가하여 OR로 여러 호출을 구분합니다.

orHavingIn([$key = null[, $values = null[, $escape = null]]])
매개변수:
  • $key (string) – 검색할 필드

  • $values (array|BaseBulder|Closure) – 대상 값의 배열 또는 하위 쿼리를 위한 익명 함수

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

적절한 경우 OR와 결합된 HAVING 필드 IN(‘item’, ‘item’) SQL 쿼리를 생성합니다.

orHavingNotIn([$key = null[, $values = null[, $escape = null]]])
매개변수:
  • $key (string) – 검색할 필드

  • $values (array|BaseBulder|Closure) – 대상 값의 배열 또는 하위 쿼리를 위한 익명 함수

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

적절한 경우 OR와 결합된 HAVING 필드 NOT IN('item', 'item') SQL 쿼리를 생성합니다.

havingIn([$key = null[, $values = null[, $escape = null]]])
매개변수:
  • $key (string) – 조사할 필드 이름

  • $values (array|BaseBulder|Closure) – 대상 값의 배열 또는 하위 쿼리를 위한 익명 함수

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

적절한 경우 AND와 결합된 HAVING 필드 IN('item', 'item') SQL 쿼리를 생성합니다.

havingNotIn([$key = null[, $values = null[, $escape = null]]])
매개변수:
  • $key (string) – 조사할 필드 이름

  • $values (array|BaseBulder|Closure) – 대상 값의 배열 또는 하위 쿼리를 위한 익명 함수

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

  • $insensitiveSearch (bool) – 대소문자를 구분하지 않고 검색을 강제할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

적절한 경우 AND와 결합된 HAVING 필드 NOT IN('item', 'item') SQL 쿼리를 생성합니다.

havingLike($field[, $match = ''[, $side = 'both'[, $escape = null[, $insensitiveSearch = false]]]])
매개변수:
  • $field (string) – 필드 이름

  • $match (string) – 일치시킬 텍스트 부분

  • $side (string) – ‘%’ 와일드카드를 표현식의 어느 쪽에 넣을지

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

  • $insensitiveSearch (bool) – 대소문자를 구분하지 않고 검색을 강제할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리의 HAVING 부분에 LIKE 절을 추가하여 AND로 여러 호출을 구분합니다.

orHavingLike($field[, $match = ''[, $side = 'both'[, $escape = null[, $insensitiveSearch = false]]]])
매개변수:
  • $field (string) – 필드 이름

  • $match (string) – 일치시킬 텍스트 부분

  • $side (string) – ‘%’ 와일드카드를 표현식의 어느 쪽에 넣을지

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

  • $insensitiveSearch (bool) – 대소문자를 구분하지 않고 검색을 강제할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리의 HAVING 부분에 LIKE 절을 추가하여 여러 클래스를 OR로 구분합니다.

notHavingLike($field[, $match = ''[, $side = 'both'[, $escape = null[, $insensitiveSearch = false]]]])
매개변수:
  • $field (string) – 필드 이름

  • $match (string) – 일치시킬 텍스트 부분

  • $side (string) – ‘%’ 와일드카드를 표현식의 어느 쪽에 넣을지

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

  • $insensitiveSearch (bool) – 대소문자를 구분하지 않고 검색을 강제할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리의 HAVING 부분에 NOT LIKE 절을 추가하여 AND로 여러 호출을 구분합니다.

orNotHavingLike($field[, $match = ''[, $side = 'both'[, $escape = null[, $insensitiveSearch = false]]]])
매개변수:
  • $field (string) – 필드 이름

  • $match (string) – 일치시킬 텍스트 부분

  • $side (string) – ‘%’ 와일드카드를 표현식의 어느 쪽에 넣을지

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리의 HAVING 부분에 NOT LIKE 절을 추가하여 OR로 여러 호출을 구분합니다.

havingGroupStart()
반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

내부 조건에 AND을 사용하여 HAVING 절에 대한 그룹 표현식을 시작합니다.

orHavingGroupStart()
반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

내부 조건에 OR을 사용하여 HAVING 절에 대한 그룹 표현식을 시작합니다.

notHavingGroupStart()
반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

내부 조건에 AND NOT을 사용하여 HAVING 절에 대한 그룹 표현식을 시작합니다.

orNotHavingGroupStart()
반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

내부 조건에 OR NOT을 사용하여 HAVING 절에 대한 그룹 표현식을 시작합니다.

havingGroupEnd()
반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

HAVING 절에 대한 그룹 표현식을 종료합니다.

groupBy($by[, $escape = null])
매개변수:
  • $by (mixed) – 그룹화 기준이 되는 필드 문자열 또는 배열

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리에 GROUP BY 절을 추가합니다.

orderBy($orderby[, $direction = ''[, $escape = null]])
매개변수:
  • $orderby (string) – 정렬 기준 필드

  • $direction (string) – 요청된 순서 - ASC, DESC 또는 무작위

  • $escape (bool) – 값과 식별자를 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리에 ORDER BY 절을 추가합니다.

limit($value[, $offset = 0])
매개변수:
  • $value (int) – 결과를 제한할 행 수

  • $offset (int) – 건너뛸 행 수

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리에 LIMITOFFSET 절을 추가합니다.

offset($offset)
매개변수:
  • $offset (int) – 건너뛸 행 수

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

쿼리에 OFFSET 절을 추가합니다.

union($union)
매개변수:
  • $union (BaseBulder|Closure) – 유니온 쿼리

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

UNION 절을 추가합니다.

unionAll($union)
매개변수:
  • $union (BaseBulder|Closure) – 유니온 쿼리

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

UNION ALL 절을 추가합니다.

set($key[, $value = ''[, $escape = null]])
매개변수:
  • $key (mixed) – 필드 이름 또는 필드/값 쌍의 배열

  • $value (mixed) – $key가 단일 필드인 경우 필드 값

  • $escape (bool) – 값을 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

나중에 insert(), update() 또는 replace()에 전달될 필드/값 쌍을 추가합니다.

insert([$set = null[, $escape = null]])
매개변수:
  • $set (array) – 필드/값 쌍의 연관 배열

  • $escape (bool) – 값을 이스케이프할지 여부

반환:

성공 시 true, 실패 시 false

반환 형식:

bool

INSERT 문을 컴파일하고 실행합니다.

insertBatch([$set = null[, $escape = null[, $batch_size = 100]]])
매개변수:
  • $set (array) – 삽입할 데이터

  • $escape (bool) – 값을 이스케이프할지 여부

  • $batch_size (int) – 한 번에 삽입할 행 수

반환:

삽입 작업을 수행할 데이터가 없는 경우 삽입된 행 수 또는 false

반환 형식:

int|false

일괄 INSERT 문을 컴파일하고 실행합니다.

참고

$batch_size보다 많은 행이 제공되면 여러 개의 INSERT 쿼리가 실행되며 각각 최대 $batch_size만큼의 행을 삽입하려고 시도합니다.

setInsertBatch($key[, $value = ''[, $escape = null]])

버전 4.3.0부터 폐지됨: 대신 CodeIgniter\Database\BaseBuilder::setData()를 사용하세요.

매개변수:
  • $key (mixed) – 필드 이름 또는 필드/값 쌍의 배열

  • $value (string) – $key가 단일 필드인 경우 필드 값

  • $escape (bool) – 값을 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

나중에 insertBatch()를 통해 테이블에 삽입할 필드/값 쌍을 추가합니다.

중요

이 메서드는 더 이상 사용되지 않습니다. 향후 릴리스에서 제거될 예정입니다.

upsert([$set = null[, $escape = null]])
매개변수:
  • $set (array) – 필드/값 쌍의 연관 배열

  • $escape (bool) – 값을 이스케이프할지 여부

반환:

성공 시 true, 실패 시 false

반환 형식:

bool

UPSERT 문을 컴파일하고 실행합니다.

upsertBatch([$set = null[, $escape = null[, $batch_size = 100]]])
매개변수:
  • $set (array) – 업데이트할 데이터

  • $escape (bool) – 값을 이스케이프할지 여부

  • $batch_size (int) – 한 번에 업데이트할 행 수

반환:

업데이트된 행 수 또는 실패 시 false

반환 형식:

int|false

일괄 UPSERT 문을 컴파일하고 실행합니다.

참고

MySQL은 ON DUPLICATE KEY UPDATE을 사용하며, 행당 영향을 받는 행 값은 행이 새 행으로 삽입되면 1, 기존 행이 업데이트되면 2, 기존 행이 현재 값으로 설정되면 0입니다.

참고

$batch_size보다 많은 행이 제공되면 여러 개의 UPSERT 쿼리가 실행되며 각각 최대 $batch_size만큼의 행을 upsert하려고 시도합니다.

update([$set = null[, $where = null[, $limit = null]]])
매개변수:
  • $set (array) – 필드/값 쌍의 연관 배열

  • $where (string) – WHERE 절

  • $limit (int) – LIMIT 절

반환:

성공 시 true, 실패 시 false

반환 형식:

bool

UPDATE 문을 컴파일하고 실행합니다.

updateBatch([$set = null[, $constraints = null[, $batchSize = 100]]])
매개변수:
  • $set (array|object|null) – 필드 이름 또는 필드/값 쌍의 연관 배열

  • $constraints (array|RawSql|string|null) – 업데이트할 키로 사용되는 필드입니다.

  • $batchSize (int) – 단일 쿼리로 그룹화할 조건 수

반환:

업데이트된 행 수 또는 실패 시 false

반환 형식:

int|false

참고

v4.3.0부터 $set, $constraints 파라미터의 타입이 변경되었습니다.

일괄 UPDATE 문을 컴파일하고 실행합니다. $constraints 매개변수는 쉼표로 구분된 열 문자열, 배열, 연관 배열 또는 RawSql를 사용합니다.

참고

$batchSize개 이상의 필드/값 쌍이 제공되면 여러 쿼리가 실행되며 각 쿼리는 최대 $batchSize개의 필드/값 쌍을 처리합니다. $batchSize를 0으로 설정하면 모든 필드/값 쌍이 하나의 쿼리에서 실행됩니다.

updateFields($set[, $addToDefault = false[, $ignore = null]])

Added in version 4.3.0.

매개변수:
  • $set (mixed) – 열의 행 또는 행의 배열, 행은 배열 또는 객체입니다.

  • $addToDefault (bool) – 데이터 세트에 있는 열보다 추가 열을 추가합니다.

  • $ignore (bool) – $set의 열에서 무시할 열 배열

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

updateBatch()upsertBatch() 메서드와 함께 사용됩니다. 이는 업데이트될 필드를 정의합니다.

onConstraint($set)

Added in version 4.3.0.

매개변수:
  • $set (mixed) – 사용된 필드 또는 필드 집합에 키 또는 제약 조건이 있음

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

updateBatch()upsertBatch() 메서드와 함께 사용됩니다. 이는 쉼표로 구분된 열 문자열과 배열, 연관 배열 또는 RawSql을 사용합니다.

setData($set[, $escape = null[, $alias = '']])

Added in version 4.3.0.

매개변수:
  • $set (mixed) – 열의 행 또는 행의 배열, 행은 배열 또는 객체입니다.

  • $escape (bool) – 값을 이스케이프할지 여부

  • $alias (bool) – 데이터세트의 테이블 별칭

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

삽입, 업데이트, upsert를 위한 데이터를 설정하는 *Batch() 메서드에 사용됩니다.

setUpdateBatch($key[, $value = ''[, $escape = null]])

버전 4.3.0부터 폐지됨: 대신 CodeIgniter\Database\BaseBuilder::setData()를 사용하세요.

매개변수:
  • $key (mixed) – 필드 이름 또는 필드/값 쌍의 배열

  • $value (string) – $key가 단일 필드인 경우 필드 값

  • $escape (bool) – 값을 이스케이프할지 여부

반환:

BaseBuilder 인스턴스(메서드 체이닝)

반환 형식:

BaseBuilder

나중에 updateBatch()를 통해 테이블에 업데이트될 필드/값 쌍을 추가합니다.

중요

이 메서드는 더 이상 사용되지 않습니다. 향후 릴리스에서 제거될 예정입니다.

replace([$set = null])
매개변수:
  • $set (array) – 필드/값 쌍의 연관 배열

반환:

성공 시 true, 실패 시 false

반환 형식:

bool

REPLACE 문을 컴파일하고 실행합니다.

delete([$where = ''[, $limit = null[, $reset_data = true]]])
매개변수:
  • $where (string) – WHERE 절

  • $limit (int) – LIMIT 절

  • $reset_data (bool) – 쿼리 “write” 절을 재설정하려면 true

반환:

BaseBuilder 인스턴스(메서드 체이닝) 또는 실패 시 false

반환 형식:

BaseBuilder|false

DELETE 쿼리를 컴파일하고 실행합니다.

deleteBatch([$set = null[, $constraints = null[, $batchSize = 100]]])
매개변수:
  • $set (array|object|null) – 필드 이름 또는 필드/값 쌍의 연관 배열

  • $constraints (array|RawSql|string|null) – 삭제할 키로 사용되는 필드입니다.

  • $batchSize (int) – 단일 쿼리로 그룹화할 조건 수

반환:

삭제된 행 수 또는 실패 시 false

반환 형식:

int|false

일괄 DELETE 쿼리를 컴파일하고 실행합니다.

increment($column[, $value = 1])
매개변수:
  • $column (string) – 증가시킬 열의 이름

  • $value (int) – 열에서 증가할 금액

지정된 양만큼 필드 값을 증가시킵니다. 필드가 VARCHAR와 같은 숫자 필드가 아닌 경우 $value로 대체될 가능성이 높습니다.

decrement($column[, $value = 1])
매개변수:
  • $column (string) – 감소시킬 열의 이름

  • $value (int) – 열에서 감소할 금액

지정된 양만큼 필드 값을 감소시킵니다. 필드가 VARCHAR와 같은 숫자 필드가 아닌 경우 $value로 대체될 가능성이 높습니다.

truncate()
반환:

성공 시 true, 실패 시 false, 테스트 모드 시 문자열

반환 형식:

bool|string

테이블에서 TRUNCATE 문을 실행합니다.

참고

사용 중인 데이터베이스 플랫폼이 TRUNCATE를 지원하지 않는 경우 DELETE 문이 대신 사용됩니다.

emptyTable()
반환:

성공 시 true, 실패 시 false

반환 형식:

bool

DELETE 문을 통해 테이블에서 모든 레코드를 삭제합니다.

getCompiledSelect([$reset = true])
매개변수:
  • $reset (bool) – 현재 QB 값을 재설정할지 여부

반환:

문자열로 컴파일된 SQL 문

반환 형식:

string

SELECT 문을 컴파일하여 문자열로 반환합니다.

getCompiledInsert([$reset = true])
매개변수:
  • $reset (bool) – 현재 QB 값을 재설정할지 여부

반환:

문자열로 컴파일된 SQL 문

반환 형식:

string

INSERT 문을 컴파일하여 문자열로 반환합니다.

getCompiledUpdate([$reset = true])
매개변수:
  • $reset (bool) – 현재 QB 값을 재설정할지 여부

반환:

문자열로 컴파일된 SQL 문

반환 형식:

string

UPDATE 문을 컴파일하여 문자열로 반환합니다.

getCompiledDelete([$reset = true])
매개변수:
  • $reset (bool) – 현재 QB 값을 재설정할지 여부

반환:

문자열로 컴파일된 SQL 문

반환 형식:

string

DELETE 문을 컴파일하여 문자열로 반환합니다.