Как сделать replace вместо insertBatch для вставки/обновления несколько записей?

Как сделать replace вместо insertBatch для вставки/обновления несколько записей?

replace не работает с многомерным массивом, он обновляет запись если совпадает первичный ключ, а также и просто вставляет запись.

insertBatch работает с многомерным массивом, но он просто вставляет записи.

// url c первичным ключем
$data = [
    ['url' => 'https://google.com/', 'name' => 'Google'],
    ['url' => 'https://yandex.com/', 'name' => 'Yandex'],
    // более 1000 записей
];
$builder = $this->db->table('posts');

$builder->replace($data); // не работает

CodeIgniter 4

https://codeigniter.com/user_guide/database/query_builder.html#updating-data


Ответы (1 шт):

Автор решения: ozornick

Вопрос, конечно, давний, но всё же. В версии CodeIgniter 4.3.0 появился новый метод upsertBatch(). Думаю, то что требовалось - обновить или вставить новые записи.

https://codeigniter4.github.io/userguide/database/query_builder.html#upsertbatch

P.S. Версия вышла 20.01.2023, странно, что не обратили внимание на этот метод.

→ Ссылка