【CakePHP】トランザクションの方法

こんちには、フリーの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メソッドを使用してトランザクション処理を実施します。

コメント

タイトルとURLをコピーしました