0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ソフトデリート(論理削除)とハードデリート(物理削除)の違いと使い分け

Last updated at Posted at 2025-03-23

はじめに

Laravelでデータを削除するとき、delete() を呼ぶだけで簡単に削除できますが、
実は「ソフトデリート(論理削除)」と「ハードデリート(物理削除)」の2種類があることをご存知でしょうか?

この2つの違いや使い分けを、自分の学習メモとして整理しておきます。


①ソフトデリート(論理削除)とは?

データベースからレコードを物理的には削除せず、「削除済み」としてマークする方式です。

Laravelでは、SoftDeletes トレイトをモデルに追加するだけで使えます。

モデルでの設定

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

class Post extends Model
{
    use SoftDeletes;
}

必要なカラム

マイグレーションでdeleted_adカラムを追加します。

$table->softDeletes(); // datetime型の deleted_at カラムを追加

②ソフトデリートの操作方法

1.データの削除(論理削除)

$post = Post::find($id);
$post->delete();

→ 実際には削除されず、deleted_at に日時が記録されるだけ。

2.削除済みデータを取得する

Post::withTrashed()->get();      // 削除済みも含む
Post::onlyTrashed()->get();      // 削除済みのみ

3.削除を取り消す(復元)

$post->restore();

③ハードデリート(物理削除)とは?

データベースからレコードを完全に削除する方式です。

方法1: ソフトデリートを使わずにdelete()

$post = Post::find($id);
$post->delete(); // 完全削除される

方法2: ソフトデリートモデルでforceDelete()

$post = Post::find($id);
$post->forceDelete(); // 完全に削除(復元できない)

④ソフトデリートとハードデリートの比較

IMG_3733.jpeg

⑤実務での使い分けの目安

  • ユーザーや投稿など、将来的に復元の可能性があるデータ
    ソフトデリートを使用する

  • ログや一時データなど、完全に消して問題ないデータ
    ハードデリートでOK

⑥まとめ

  • Laravelでは簡単に「削除の種類」を使い分けられる
  • ソフトデリートは SoftDeletes トレイト+ deleted_at のカラムが必要
  • ハードデリートは forceDelete() またはソフトデリート未使用モデルの delete()
  • 安全第一の設計をしたいなら、まずはソフトデリートで運用してみるのがベター
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?