ざきのメモ

2018/10/15

CakePHP3 で saveAll みたいなことをする

CakePHP3 では以前のバージョンにはあった saveAll はなくなっています。

このページでは CakePHP3 で saveAll のように、複数レコードを一括で登録する方法をまとめます。

環境

  • CakePHP 3.6.10

あまり良くない方法

さきに、あまり良くない方法を紹介します。

この方法は処理が重く、多数のレコードを保存するのには向いていません。

自分は最初この方法を使用していて、多数のレコードを扱うときにブラウザがクラッシュし辛い思いをしました。

foreach ($entities as $entity) {
    $this->Maps->save($entity);
}

もしこの方法を使っていて悩んでいたら次に紹介する方法を試してみてください。

良い方法

この方法はクエリビルダーをつかってクエリを作り、複数レコードの一括保存を実現する方法です。

これは処理が軽いです。

$query = $this->Maps->query();
$query->insert(['name', 'size', 'data']);
foreach ($entities as $entity) {
  $query->values($entity);
}
$query->execute();

参考

Copyright © 2017-2021 Ryo Okazaki, all rights reserved.