トランザクション後にイベントを発火する

例えば注文を受けてトランザクション内でDBを更新し、その注文についての通知を飛ばす場合。

Sample

memo

DB::transaction(callback)を用いた場合、コールバックの前後でbeginTransactioncommitが呼ばれる。コールバックの返り値が返されるのでそれをDB::transactionの返り値として使用できる。

例外発生時はtransaction内部で補足してロールバックして外に投げてくれる。
transactionの第二引数(int)を指定した場合例外が投げられたらその回数リトライするが、PHP7+のErrorが投げられた場合はその時点で潔く諦めてロールバックする。

トランザクション内が複雑な場合はDB::beginTransaction, DB::commitを呼んでもいいがコールバックで済ませれる程度のほうが無駄なロックを生まなくできるよう意識しやすい気がする。
あと手動でやる場合はロールバックを忘れずに。

コメントを残す