こんちには、フリーのITエンジニアでWeb(PHP:Laravel)のバッグエンドをメインにフルリモートでお仕事させて頂きながら、個人開発でiOSアプリを作っているMoritaです。
Webサイトやアプリ開発をしているとエラーとの遭遇は避けられません。
場合によってはデータを処理前の状態に戻したい場合があります。
CakePHPでのトランザクション処理の方法を紹介します。
コネクションを取得しよう!
まずはデータベースとの接続をするためのConnectionクラスのインスタンスを取得します。
$connection = ConnectionManager::get('default');
トランザクションを開始しよう!
次にトランザクションの開始を宣言します。
$connection->begin();
その後にデータベースとの処理を実行します。
トランザクションを使用して、エラーが発生した場合にロールバックで処理を取り消しにするわけですから、複数のテーブルに対してInsertやUpdate、Delete処理を実行した結果、どれか1つのテーブルでエラーが発生した場合にロールバックですべてのテーブルに対しての処理を取消します。
テーブルへの更新を確定しよう!
テーブルへの更新が問題なければコミットで処理を確定します。
$connection->commit();
エラーが発生したら?
更新処理でエラーが発生したらデータをトランザクション開始前の状態へ戻さなければデータの整合性が取れない状態になっている可能性があります。
ロールバックを実行してもとに戻します。
$connection->rollback();
ロールバック処理をどこに記述すればいいかというと、
try〜catchのcatch句に書きます。
ちなみちエラー補足対象のInsertやUpdate、Deleteなどはtry〜catchの間に書きます。
まとめ
Connectionクラスのインスタンスを取得するためにConnectionManager::getメソッドを使用する。
Connectionクラスのbeginメソッド、commitメソッド、rollbackメソッドを使用してトランザクション処理を実施します。
コメント