Help us understand the problem. What is going on with this article?

Laravel,transaction

皆さん、こんにちは:hand_splayed:
今回はLaravelの勉強していた時に、transactionについてなにも分からないまま使っていたので、調べて見ました!

開発環境

・Mac
・php 7.4.6
・Laravel 7.15.0
・MySQL

transaction

transactionは、複数の処理をまとめて実行したい時に使います。
掲示板アプリがあるとしましょう。掲示板にはユーザーが自由にコメントを書くことが出来ます。その上で、ある特定の投稿を削除するときのことを考えます。この時、投稿自体は削除出来たけど、コメントを削除する段階でエラーが発生したらどうなるでしょうか。もちろん、コメントテーブルと投稿のテーブルはリレーションを張っているわけなので、この場合投稿だけが残りコメントだけ残ってしまいます。このようなことを防ぐためにtransactionを使います。

DB::transaction(function() {
   //処理を記述
});

クロージャーの中で例外が発生した場合は、ロールバックされます。またクロージャー内で返した値が戻り値となります。

transactionの例

QuestionController.php
$question = Question::findOrFail($question_id)
\DB::transaction(function() use ($question){
    $question->answers()->delete();
    $question->delete();
});

Q&Aがあり、questionsテーブルとanswersテーブルにリレーションがはられています。
transactionによって必ずまとめて削除されるか、エラーが出ても片方だけが実行されるということはありません。
指摘がありましたらコメントお願いします:pray:

参考にした記事、サイト

Laravel Tips 🍬 transactionメソッドは値を返す
Laravelでトランザクション処理の方法をサンプル付きで解説

ryo-program
  理系国公立大学3年でエンジニア就職を目指して毎日勉強しています。勉強のアウトプットとして投稿していきます。間違っていたり、分かりにくい箇所もあるとは思いますが、よろしくお願いします。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした