そもそも論理削除とはなんぞや?
論理削除は、
本当にデータベースから削除するのではなく、フラグなどを立ててシステム上から見えなくすること。
反対に物理削除もある。
こちらは文字通りデータそのものを削除する方法。
物理削除してしまうと貴重なデータが完全に消えてしまうが、
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()
を使うことで簡単に論理削除できる。