Laravel 5.1 入門記 その13 (トランザクション編)
今回は簡単に。トランザクション制御です。
Database: Getting Started - Laravel - The PHP Framework For Web Artisans
Database Transactions
Laravel というか PHP の場合?宣言的にトランザクション制御を行う簡単な方法も無いため、Closure スタイルのトランザクション境界設定か、トランザクション開始と終了で関数を呼び出す2パターンが実装方法として用意されてます。
Transaction Closure
Closure でのトランザクション実装は以下の様な感じ。
DB::transaction(function () { DB::table('users')->update(['votes' => 1]); DB::table('posts')->delete(); });
正常に処理が成功すれば commit、失敗して例外が発生したら rollback です。 この DB::transaction を利用するときは、自動で commit / rollback が行われるので、手動での作業は不要になります。
ちなみに、DBファサードの処理は、Eloquent を使っても DB ファサードからクエリを実行しても同じで、同様にトランザクション処理が行えます。 Eloquent を使った例で、以下の様にも実装できます。
DB::transaction(function () { User::all()->update(['votes' => 1]); Post::all()->delete(); });
Manually Using Transactions
手動でトランザクションを制御したい時は、以下の様な感じ。
DB::beginTransaction(); // 何らかの処理 if (Another::processDataEntry()) { // 成功 DB::commit(); } else { // 失敗 DB::rollback(); }
見たままですね。
トランザクション処理は終わりで、次は Request の一歩進んだ使い方とエラーメッセージの使い方などをまとめます。