計算処理を減らすため、中間テーブルと同時に行を挿入しなければならない時など、
トランザクション処理を行いたい場面はよくあります。
そんな時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が入ります。