やったこと

webサービスを作るときに考えたことを垂れ流します

【CakePHP3】異なるテーブル間でデータをコピーする!

CakePHP3で、あるテーブルのデータを別のテーブルにコピーする形でセーブする方法です。

以下、「Draft_posts」テーブルのデータを「Posts」テーブルにコピーしています。
(※この二つのテーブルは全く同じ構造をしています)

  try{
    //コピー元のデータを取得
    $post = $this->Draft_posts->find()->where(['post_id' => 1234])->first();

    //セーブ!
    $entity = $this->Posts->newEntity();
    $entity = $this->Posts->patchEntity($entity, $post->toArray());
    $ret = $this->Posts->save($entity);

    if (!$ret){
      throw new Exception();
    }
  } catch (Exception $ex) {
    //エラー時
    $this->log("cannot copy data:".$ex->getMessage(), "debug");
  }

以上!