データベースに対して複数の処理したいことがあると思います。データベースの更新を一つずつ順に行っていくことを考えると 一時的にデータベースとして不整合な状態になるため、これらの更新は一度に処理したいところです。そこで、トランザクションによる解決法が考えられます
トランザクションとはデータベースに対して行われる1つ以上の更新処理を1つの処理としてまとめてデータベースに反映させること
です。以下にCakePHPによるその一番かんたんなサンプルコードを示します。コントローラーでトランザクションを使うためにはConnectionManagerをuseする必要があります
<?php namespace App\Controller; use App\Controller\AppController; use Cake\Datasource\ConnectionManager; class HogeController extends AppController { public function index() { $connection = ConnectionManager::get('default'); // トランザクション開始 $connection->begin(); try { // 行いたい処理 // コミット $connection->commit(); } catch(\Exception $e) { // 例外に対する処理 // ロールバック $connection->rollback(); } } }
begin() でトランザクションを開始してデータを更新する際には commit() します。なんらかのエラーなどによって更新を取り消したい場合は rollback() することでデータは更新されることなくトランザクションを終了します。 get(‘default’) の default というのは、 cakephp/config/app.php で設定されている Datasources プロパティの default 部分になります。get(‘default’) とすることで app.php で設定されたデータベースに対してトランザクションを行うことができます