Laravel 6でレコードを論理削除するには

Laravel Laravel

テーブルのレコードを物理削除ではなく、論理削除したいことがあります。Laravelにはその仕組が備わっています。

Laravel 6でレコードを論理削除する

マイグレーションを修正する

“deleted_at”というプロパティを追加します。マイグレーションを修正します。

    public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('user_id')->comment('ユーザーID');
            $table->string('title')->comment('タスクのタイトル');
            $table->string('description')->comment('タスクの説明');
            $table->date('registration_date')->comment('登録日');
            $table->date('expiration_date')->comment('期限日');
            $table->date('completion_date')->nullable()->comment('完了日(nullのときは未完了)');
            $table->softDeletes();
            $table->timestamps();
        });
    }

“$table->softDeletes();”を追記しています。

マイグレーションを実行する

下記を実行すると、全てのテーブルが削除され、再生成されます。

php artisan migrate:refresh

モデルを修正する

モデルに”Illuminate\Database\Eloquent\SoftDeletes”を使ってソフトデリート(論理削除)するように設定します。

use Illuminate\Database\Eloquent\SoftDeletes;    // 追記

class Task extends Model
{
    use SoftDeletes;    // 追記

}

上記以外、その他の箇所を修正することなく、論理削除できるようになります。

論理削除したレコードは、「削除されたこと」になっているので、クエリの結果に含まれなくなります。

この記事を書いた人

余分なこだわりは捨てる。それがぼくのスタイル。

PHPでWebアプリを作り、小さな花の写真を撮ってよろこんでいる人。元Webエンジニア。プログラミング講師。余分なこだわりを捨てて生きやすくなりたいと思いつつも、なかなかこだわりを捨てきれない頑固者。まろと呼んでください。

さかのうえの まろをフォローする
Laravel
シェアする