이 메소드는 PRIMARY 키와 UNIQUE 키를 기준으로 DELETE + INSERT에 대한 SQL 표준인 REPLACE문을 실행합니다.
이를 이용하여 `select()`, `update()`, `delete()`, `insert()`의 조합으로 구성된 복잡한 로직을 간단하게 구현할 수 있습니다.
아래 예에서 idx 필드가 기본 키라고 가정하면 idx 값이 포함된 행은 새 행 데이터로 대체되어 삭제됩니다.
`set()` 메소드 사용도 허용되며 `insert()`와 마찬가지로 모든 필드가 자동으로 이스케이프됩니다.
$builder->replace([ 'idx' => 1, 'title' => 'My title', 'name' => 'My Name', 'email' => 'My email', ]); 1 * Query : REPLACE INTO `my_table_tmp_0` (`idx`, `title`, `name`, `email`) VALUES (1, 'My title', 'My Name', 'My email') $builder->set([ 'idx' => 1, 'title' => 'My title2', 'name' => 'My Name2', 'email' => 'My email2', ])->replace(); 1 * Query : REPLACE INTO `my_table_tmp_0` (`idx`, `title`, `name`, `email`) VALUES (1, 'My title2', 'My Name2', 'My email2')
업데이트 문자열을 생성하고 제공한 데이터를 기반으로 쿼리를 실행합니다.
$builder->where('idx',1)->update([ 'title' => 'My title', 'name' => 'My Name', 'email' => 'My email', ]); 1 * Query : UPDATE `my_table_tmp_0` SET `title` = 'My title', `name` = 'My Name', `email` = 'My email' WHERE `idx` = 1
WHERE절을 `update()` 함수에 직접 전달할 수 있습니다.
// 문자열로 전달 $builder->update([ 'title' => 'My title', 'name' => 'My Name', 'email' => 'My email', ], 'idx = 1'); 1 * Query : UPDATE `my_table_tmp_0` SET `title` = 'My title', `name` = 'My Name', `email` = 'My email' WHERE `idx` = 1 // 배열로 전달 $builder->update([ 'title' => 'My title', 'name' => 'My Name', 'email' => 'My email', ], ['idx' => 1]); 1 * Query : UPDATE `my_table_tmp_0` SET `title` = 'My title', `name` = 'My Name', `email` = 'My email' WHERE `idx` = 1
이 기능을 사용하면 Insert처럼 데이터 배열을 직접 Update로 전달할 수 있습니다.
$builder->set([ 'title' => 'My title', 'name' => 'My Name', 'email' => 'My email', ])->where('idx', 1)->update(); 1 * Query : UPDATE `my_table_tmp_0` SET `title` = 'My title', `name` = 'My Name', `email` = 'My email' WHERE `idx` = 1
update 문자열을 생성하고 제공한 데이터를 기반으로 쿼리를 실행합니다.
첫 번째 매개 변수는 값의 연관 배열이고, 두 번째 매개 변수는 where절에 사용할 키입니다.
$builder->updateBatch([ [ 'idx' => 1, 'title' => 'My title', 'name' => 'My Name', 'email' => 'My email', ], [ 'idx' => 2, 'title' => 'My title', 'name' => 'My Name', 'email' => 'My email', ], ], 'idx'); 1 * Query : UPDATE `my_table_tmp_0` SET `title` = CASE WHEN `idx` = 1 THEN 'My title' WHEN `idx` = 2 THEN 'My title' ELSE `title` END, `name` = CASE WHEN `idx` = 1 THEN 'My Name' WHEN `idx` = 2 THEN 'My Name' ELSE `name` END, `email` = CASE WHEN `idx` = 1 THEN 'My email' WHEN `idx` = 2 THEN 'My email' ELSE `email` END WHERE `idx` IN(1,2)
Update 쿼리를 컴파일하지만 쿼리를 실행하지는 않습니다. 이 메소드는 SQL 쿼리를 문자열로 반환합니다.
$builder->set([ 'title' => 'My title', 'name' => 'My Name', 'email' => 'My email', ])->where('idx', 1)->getCompiledUpdate(); UPDATE `my_table_tmp_0` SET `title` = 'My title', `name` = 'My Name', `email` = 'My email' WHERE `idx` = 1