Laravelで既存のモデルをソフトデリート対応する

Laravelでは、データベースのレコードを物理的に削除するのではなく、論理的に削除する「ソフトデリート」(または論理削除)機能を簡単に実装できます。これにより、データの復元や履歴のトラッキングが容易になります。この記事では、既存のLaravelモデルにソフトデリート機能を追加する方法を解説します。

ステップ1: モデルにソフトデリート用のカラムを追加する

まず、既存のモデルにソフトデリート用のカラムを追加します。通常、deleted_at カラムを使用します。このカラムはデフォルトで NULL で初期化され、レコードが削除されるとその日時が自動的に設定されます。

モデルファイル(例:app/Models/YourModel.php)を開き、以下のように SoftDeletes トレイトを追加します。

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

class YourModel extends Model
{
    use SoftDeletes;

    // ...
}

これにより、YourModel モデルはソフトデリート機能を使用できるようになります。

ステップ2: データベースマイグレーションを実行する

次に、データベーステーブルに deleted_at カラムを追加するマイグレーションを作成します。コマンドラインで以下のコマンドを実行します。

php artisan make:migration add_deleted_at_to_your_models_table

生成されたマイグレーションファイルを編集し、deleted_at カラムを追加します。

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

その後、マイグレーションを実行します。

php artisan migrate

これにより、データベーステーブルに deleted_at カラムが追加され、ソフトデリートが有効になります。

ステップ3: ソフトデリートの利用

ソフトデリートを利用するには、以下のようにモデルを削除します。

$yourModel = YourModel::find($id);
$yourModel->delete();

これにより、deleted_at カラムが設定され、レコードは論理的に削除された状態になります。復元する場合は、restore メソッドを使用します。

$yourModel->restore();

また、論理的に削除されたレコードを取得するには、withTrashed メソッドを使用します。

$yourModels = YourModel::withTrashed()->get();

これで、Laravelで既存のモデルにソフトデリート機能を追加し、データを安全に削除および復元できるようになりました。ソフトデリートを使用することで、データの履歴をトラッキングするなどの用途にも便利です。