トランザクションはどういう場面で使いますか。
複数テーブルを更新して、片方だけ成功すると不整合になる箇所に使います。注文を作ってから在庫を減らす、が典型です。途中で例外が出れば全部が巻き戻る、という保証を買っています。
面接官が見ているのは整合性という観点を持っているか。
よくある答えと、面談でどう見られるか
- 複数のテーブルを更新し、途中で失敗すると不整合になる場面
その通りです。注文の作成と在庫の減算のような組み合わせが典型です。 - 処理を速くしたい場面
速度のための仕組みではありません。 - 同じ処理を何度も実行したい場面
繰り返し実行とは関係ありません。 - SELECT で大量のデータを取得する場面
読み取りだけなら通常は不要です。
模範解答
複数のテーブルを更新して、片方だけ成功すると不整合になる箇所に使います。注文を作ってから在庫を減らす、のような組み合わせが典型です。
DB::transaction(function () {
$order = Order::create([...]);
$stock->decrement('qty');
});クロージャ形式なら例外時に自動でロールバックされます。範囲は最小限にします。中に外部API呼び出しを入れると、応答待ちの間ずっとロックを握り続けることになります。