CakePHP3でトランザクション処理を行う

公式ドキュメント

https://book.cakephp.org/3.0/ja/orm/database-basics.html#id11

UsersController.php

use Cake\Datasource\ConnectionManager;
use Cake\Core\Exception\Exception;
use Cake\Core\Configure;

            $connection = ConnectionManager::get('default');
            // トランザクション開始
            $connection->begin();
            try {
                if ($this->Groups->save($group)) {
                    if ($this->Users->save($user)) {
                        $this->Flash->success(__('保存しました'));
                        // コミット
                        $connection->commit();
                    } else {
                        $this->Flash->error(__('保存に失敗した'));
                        throw new Exception(Configure::read("M.ERROR.INVALID"));
                    }
                } else {
                    $this->Flash->error(__('保存に失敗した'));
                    throw new Exception(Configure::read("M.ERROR.INVALID"));
                }
            } catch (Exception $e) {
                //ロールバック
                $connection->rollback();
            }
        }

上記で取得している default は config/app.php内の

    'Datasources' => [
        'default' => [

に相当します。

参考

http://qiita.com/matsuyoro/items/99670b546f5f5cbd914d

http://pk-brothers.com/1751/