【Laravel】削除フラグ不要!レコードを論理削除する方法

こんにちは!CODE CLUB965のKです!

今回は、Laravelで「delete_flag」のような削除フラグを使用せずに、DBテーブルのレコードを論理削除する方法について書こうと思います。

結論から言いますが、Laravelではレコードを論理削除するための機能として「ソフトデリート」というものがあります。

ソフトデリートを使えば簡単に論理削除を実装できるので、ぜひ機会があれば使ってみて下さい。

まずはマイグレーションファイルを作成する

まずは、DBにテーブルを作るためにマイグレーションファイルを作成します。

マイグレーションファイルの作成方法については既に記事がありますので、そちらを参考にして下さい。

マイグレーションファイルにソフトデリートを記述する

マイグレーションファイルができたら、ファイル内に「softDeletes()」を記述します。

以下のように記述すればOKです。

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->text('name');
            $table->timestamps();
            $table->softDeletes(); // 論理削除
        });
    }

上記のように「softDeletes()」を記述することで、論理削除用の「deleted_at」カラムが作成されます。

ちなみに「deleted_at」カラムは、デフォルトで「NULL」になっています。
論理削除するとこのカラムに削除日時が入り、削除されたことと見なされます。
これが論理削除です。(レコードは残っているが、削除とみなされる)

逆に物理削除だとレコードごと消えます。

ファイルを作成したら、あとはマイグレーションを実行してテーブルを作成するだけです。
作成すると「deleted_at」カラムが定義されるので確認して下さい。

モデルに追記する

テーブルを作成したら次にモデルに「use SoftDeletes;」を記述する必要があります。

以下のように太字の箇所をモデルに追記します。

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model
{
    use SoftDeletes;
}

これは、SoftDeletes(ソフトデリート)のTraitを利用することをモデルに記述しているわけです。

これで準備はOKです。
あとはデータを作成して実際に論理削除をするだけです。

論理削除するやり方

論理削除するのは簡単です。

以下のようにレコードを検索して、「delete()」で削除処理するだけです。

// メソッド名は適当です
public function destroyUser(int $id)
    {
        User::find($id)->delete();
        return;
    }

実際に実行すると、「deleted_at」カラムがNULLから削除を実行した日時に更新されます。

ちなみにモデルにSoftDeletes(ソフトデリート)のTraitを利用する記述をしない場合、物理削除になるので気をつけて下さい。

以上が論理削除する方法です。

最後に

今回は論理削除の実装方法について書きました。

簡単に実装できるので便利ですね!

論理削除を実装した際のデータの取得方法や、完全削除(物理的な削除)の方法については別の記事で書こうと思いますので参考にしてもらえればと思います。

それでは、また!

Follow me!

【Laravel】削除フラグ不要!レコードを論理削除する方法” に対して2件のコメントがあります。

コメントは受け付けていません。