
Laravel5 論理削除(ソフトデリート)
Laravel5 は物理削除だけでなく論理的に削除する(ソフトデリート)設定が簡単にできる仕組みを持っています。物理削除の場合は消したデータを復元させる事はできませんが、論理削除であればテーブル上は表示があるけど、抽出はされずWEB上に表示させないようにする事ができます。
Migrate ファイル に以下のカラムを記述
ソフトデリートを実装するためにはテーブルに「deleted_at」カラムが必要です。新規ではなく既存のテーブルにカラムを追加する事もできます。(カラムの追加方法はこちら)
public function up()
{
Schema::table('テーブル名', function (Blueprint $table) {
$table->softDeletes();
});
}
Migrateファイルを記述し終わったら、migrateをしてテーブルを作成します。
$ php artisan migrate
Model に 追記
テーブル作成だけではソフトデリートを利用する事はできません。Modelファイルに以下を追記します。
use Illuminate\Database\Eloquent\SoftDeletes; // 追記
class テーブル名 extends Model
{
// ソフトデリートを有効化
use SoftDeletes;
protected $dates = ['deleted_at'];
}
ソフトデリート記述方法
上記の通りカラムに追加してModelに追記したら、準備は完了です。ソフトデリート記述方法は物理削除を同じで「delete();」を利用します。
$data = テーブル名::findOrFail($id);
$data->delete();
上記のメソッドを実装する事でdeleted_atに日付が入りDB上は削除されませんが、通常の抽出方法ではこのデータは抽出されなくなります。