Laravel ソフトデリートはSoftDeletesトレイトでOK

目次

導入手順

UserモデルにSoftDeletesを追加

Laravelのモデルについての確認

Laravelのモデルとは基本的には「モデル = データベースのテーブル」と考えてOK

  • クラス(User) は、「usersテーブル全体」を表します。
  • インスタンス($user) は、「テーブルの中の1行(1レコード)」を表します。

そして下記の内容を定義します

  • リレーション(テーブル同士のつながり)
  • 属性設定(パスワードは隠すなど、データの扱い方)
  • カスタムメソッド(データを使った処理)

上記を踏まえて、UserモデルにSoftDeletesを追加することで、何が起きているか説明します

use SoftDeletes;

これでUserクラスに「SoftDeletesトレイトを使っています/useしています」
(PHPは1つのクラスしか継承できないため、トレイトを使用し機能を取り込んでます)

これでUserモデルは以下の3つの機能を手に入れました。

  • 「削除」の意味を変える(上書き)

通常delete() したら、データを消す。
delete() したら、「データは消さずに deleted_at に日付を入れる」という動作に変わる。

  • 「無視」する能力(フィルター)

通常User::all() したら全員出す。
User::all() したら、deleted_at に日付が入っている人は自動的に除外」して持ってくる。

  • 「復活」させる技(メソッド追加)

通常 そんな機能はない

deleted_atカラムの作成

前述した「機能(トレイト)」をしようするにはdeleted_atカラムが必要になります

マイグレーションファイルの作成しusersテーブルに論理削除用のdeleted_atカラムを追加します、そしてマイグレーションファイルの内容をデータベースに反映します

./vendor/bin/sail artisan make:migration add_deleted_at_to_users_table --table=users

./vendor/bin/sail artisan migrate

https://github.com/idw-coder/laravel-rds/tree/feature/admin-user-management

参考記事

https://readouble.com/laravel/6.x/ja/eloquent.html

目次