Soft Deleteとは
Laravel5のEloquentにはSoftDeletesという、DBテーブルからデータを物理削除するのではなく論理削除を行う機能があります。
このSoft Deleteを行うと、テーブルからはデータが削除されずに残るのですが、通常のSELECTなどでは引っ張ってくることができないようになるため、削除したときと同じ挙動になります。
この機能により、一度削除した情報がふたたび必要になった時に抽出することができます。
Laravel5におけるSoftDeletesの方法
1.モデルに以下のような記述を追加し、SoftDeletesを使えるようにします。論理削除された際は以下で指定したdeleted_atカラムにタイムスタンプがセットされます。
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Eloquent {
use SoftDeletes;
protected $dates = ['deleted_at'];
}
2.対象のテーブルのカラムにdeleted_atを追加するために、マイグレーションファイルに以下の記述を追加します。
$table->softDeletes();
これで準備は完了です。
あとはモデルに対してdeleteメソッドを実行すれば、Soft Deleteすることができます。
全レコードに対してSoft Deleteを行う
お待たせしました。タイトルの件についてです。
テーブルの全レコードを対象にSoft Deleteしたい時はどうしたら良いのか、調べてみてもあまりヒットしなかったので、備忘録的に以下にまとめます。
何かの参考になれば幸いです。
- deleted_atカラムがNULLになっているもの(すでにSoft Deleteされているレコードは除外)に対して実行する場合
ArticleDailyRanking::where('deleted_at', NULL)->delete();
- idカラムがNULLじゃない=すべてのレコードに対して実行する場合
ArticleDailyRanking::whereNotNull('id')->delete();
参考記事