Laravelのソフトデリートについてメモ
Laravelの勉強がてらメモ。
まずはモデルの削除の仕方
delete
メソッドを使用。
$user = App\User::find(1);
$user->delete();
削除するモデルのキー(id)がわかっている場合は、
モデルを取得せずとも、destroy
メソッドで削除できる。
App\User::destroy(1);
//複数指定も可能
App\User::destroy(1, 2, 3);
App\User::destroy([1, 2, 3]);
ソフトデリート
物理削除ではなく、論理削除。
DBのテーブルにdeleted_at
カラムを追加する必要がある。
まずはモデルの書き方
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Flight extends Model
{
use SoftDeletes;
}
有効にするにはIlluminate\Database\Eloquent\SoftDeletes
トレイトを使用。
これで、deleteメソッドを使用すれば、deleted_atカラムに現在時刻が挿入される。
モデル取得時も、deleted_atがNULLでなければ、クエリ結果に含まれない。
ちなみに、指定されたモデルインスタンスがソフトデリートされているかを確認するには、trashed
メソッドを使用。
if ($user->trashed()) {
//
}
ソフトデリートされたモデルも検索結果に含める
検索結果にソフトデリートされたモデルも含める場合は、withTrashed
メソッドを使用。
$users = App\User::withTrashed()->get();
ソフトデリートされたモデルのみ取得するには、onlyTrashed
メソッドを使用。
$users = App\User::onlyTrashed()->get();
ソフトデリートの解除
ソフトデリートされたモデルを解除したい場合は、restore
メソッドを使用。
$user->restore();
複数のソフトデリートされたモデルを一度に未削除にするには、
App\User::withTrashed()->restore();
物理削除(完全に削除したい)
物理削除したいときはforceDelete
メソッドを使用。
$user->forceDelete();
laravelは直感的でわかりやすいなーと思いました。