0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Laravel】Tinker(DBの手動操作)でトランザクションを実施する

Last updated at Posted at 2023-07-24

LaravelでDB操作をしたい場合、TinkerでDBを操作することが可能です。
(いちいちMySQLコマンドを叩かなくて済みます)

その際、間違って更新したくないデータを書き換えてしまった場合、
MySQLのようにロールバックする必要が出てくるかと思います。

今回はTinkerでトランザクション処理をする実行する方法について解説します。

具体的には、以下のコマンドでできます。

## トランザクション開始
DB::beginTransaction()

## ロールバック
DB::rollBack()

## トランザクションをコミット
DB::commit()

MySQLコマンドを叩いたことがある人にとってはすぐわかるかと思いますが、具体例と共に説明します。

まずは、以下のUserデータがあるとします。
これのnameを更新して戻す操作を実施したいと思います。

> User::first()
= App\Models\User {#7421
    id: 1,
    name: "test-user", ## ★更新対象
    email: "test123@gmail.com",
    email_verified_at: null,
    #password: "$2y$10$tjDxajVvG8VDhFJyuMExxeckCKXFAnvpGqkcda62cFY/vCeZXUCwa",
    #two_factor_secret: null,
    #two_factor_recovery_codes: null,
    two_factor_confirmed_at: null,
    #remember_token: null,
    current_team_id: null,
    profile_photo_path: null,
    created_at: "2023-07-24 12:32:48",
    updated_at: "2023-07-24 12:32:48",
    +profile_photo_url: "https://ui-avatars.com/api/?name=t&color=7F9CF5&background=EBF4FF",
  }

まず、トランザクションを開始します。
次にUserデータを取得してnameを書き換え、更新(save)まで実施します。
これにより、Userデータのnameが更新されることになりますが、
次のDB::rollback()を実施することで、nameの更新が無かったことになります。
元のUserデータを取得してnameを確認すると、更新前のままとなっています。

## トランザクション開始
> DB::beginTransaction()
#= null

> $user = User::first()
> $user->name = "新しい名前のユーザーネーム"
> $user->save()
#= true

> $user->name
#= "新しい名前のユーザーネーム"

## ロールバック
> DB::rollBack()
#= null

## nameが元のままで、更新が無かったことになっている
> User::first()->name
= "test-user"

もし、更新するデータに問題がなくロールバックしないのなら、
以下のようにコミットすることで更新が適用されます。

> DB::beginTransaction()
= null

> $user = User::first()

> $user->name = "更新完了ユーザーネーム"
= "更新完了ユーザーネーム"

> $user->save()
= true

## コミット
> DB::commit()
= null

> User::first()->name
= "更新完了ユーザーネーム"

上記のトランザクション処理を実行することで、
本番環境でも安全に作業することができるようになります。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?