2
1

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で論理削除

Posted at

そもそも論理削除とはなんぞや?

論理削除は、
本当にデータベースから削除するのではなく、フラグなどを立ててシステム上から見えなくすること。

反対に物理削除もある。
こちらは文字通りデータそのものを削除する方法。

物理削除してしまうと貴重なデータが完全に消えてしまうが、
DBに残しながらも削除扱いとなる論理削除(SoftDelete)だと必要なコマンドを打てば取り出すことができるため分析時に役に立つ。

手順

①マイグレーションファイルを修正し、deleted_atカラムを追加する

下記コマンドでマイグレーションファイルが新たに作成される。

php artisan make:migration add_deleted_at_to_users_table --table=users

作成されたマイグレーションファイルを開き、下記のように加筆する。
nullable()はnullを許容しているため、必ず登録する必要がない場合はつけてあげる。

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->softDeletes()->nullable();
    });
}

public function down()
{
    Schema::table('users', function (Blueprint $table) {
        $table->dropSoftDeletes();
    });
}

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

php artisan migrate

②ソフトデリートを使用できるようにモデルで宣言

  • モデルで宣言するだけで、delete()処理を実行するとdeleted_atカラムに現在の時刻がセットされる。
  • deleted_atカラムに現在の時刻がセットされていると、削除済み隣、クエリ結果に含まれない。
app/Model/User.php
<?php

namespace App\Models;
use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model
{
    use SoftDeletes;
省略

まとめ

Laravelでは softDelete() を使うことで簡単に論理削除できる。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?