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