これは何か?
CakePHP 2.3.9では、まとめてsave()する仕組み(saveManyとか)でBULK INSERTにならないようなのでBULK INSERTを試みた際のメモ。
保存しようとしているデータ
$data = array();
$data[] = array(
'group_id' => 1,
'name' => 'NAME11',
);
$data[] = array(
'group_id' => 2,
'name' => 'NAME22',
);
BULK INSERT文を作って実行する
PHP 5.1.3以降
$ds = $this->Model->getDataSource();
$query = 'INSERT INTO ' . $this->Model->useTable . '(' . implode(',', array_keys($data[0])) . ') VALUES';
$query .= '(' . implode('),(', array_fill(0, count($data), implode(',', array_fill(0, count($data[0]), '?')))) . ')';
$ds->query($query, iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($data)), false), false);
参考
- http://damepg.hatenablog.com/entry/2012/10/01/001223
- 「多次元配列をフラットな配列にするとき」のコメント
ワンライナーでフラットな配列にする参考にさせて頂きました。
- CakePHPのModel->query()でSQLを何回も発行するようなバッチを作る際の注意点
->query()の最後の引数にfalse指定する参考にさせて頂きました。
- PHPマニュアル