CakePHP3でトランザクションの使い方

計算処理を減らすため、中間テーブルと同時に行を挿入しなければならない時など、

トランザクション処理を行いたい場面はよくあります。

そんな時CakePHP3では

 ConnectionManager::get('default')->transactional

というメソッドを使います。

使用例はこちらです。

$result = false;
try {
$result = $connection->transactional(function ( $connection ) use ( $insertOneQuery, $insertTwoQuery ) {
$insertOneQuery->execute();
$insertTwoQuery->execute();
return true;
});
}catch (\PDOException $e) {
}

 

transactional()の引数の無名関数内に実行したい処理を書きます。

 

もし外部の変数を使いたいときはuseで追加してください。

 

無名関数の返り値はtransactional()の返り値になります。

今回はトランザクションが成功したかどうかが必要だったので、無名関数の最後にreturn trueしました。

つまり成功した場合は$resultにtrue,失敗した場合は$resultにfalseが入ります。