LoginSignup
27
23

More than 5 years have passed since last update.

Laravel5で全レコードに対してSoft Deleteしたい

Last updated at Posted at 2016-05-16

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();

参考記事

27
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
23