LoginSignup
4
3

More than 5 years have passed since last update.

Laravelのdelete()メソッドで論理削除しようと思ったらうまくいかなかった話

Last updated at Posted at 2019-04-14

はじめに

ユーザの論理削除に伴って、メッセージも論理削除しようと思い、下記のコードを実行したところ、メッセージだけ論理削除されずに普通に削除されてしまったので、原因と解決法を書いておきます。

public function deleteUserLogically($id)
    {
        DB::transaction(function () use ($id) {

            $user = User::find($id);

            $messages = DB::table('messages')
                    ->Where('from_id', '=', $user->id)
                    ->get();

            foreach ($messages as $message)
            {
                $message->delete();
            }

            $user->delete();
        });
    }

原因

Eloquent ORMではなく、DBファサードでdelete()メソッドを実行していた。

解決法

原因がわかったので、delete()メソッドをEloquent ORMで実行していきます。

public function deleteUserLogically($user)
    {
        DB::transaction(function () use ($id) {

            $user = User::find($id);

            $messages = Message::Where('from_id', '=', $user->id)
                    ->get();
            foreach ($messages as $message)
            {
                $message->delete();
            }

            $user->delete();
        });
    }

これでうまくいきました!

まとめ

今回の出来事で、今までなんとなく使っていた、DBファサードとEloquent ORMについて詳しくなる事ができました!また、Laravelのファサードについての理解も深められたので良かったです。

4
3
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
4
3