LoginSignup
54
40

More than 3 years have passed since last update.

Laravelのソフトデリートについてメモ

Last updated at Posted at 2019-07-05

Laravelの勉強がてらメモ。

まずはモデルの削除の仕方

deleteメソッドを使用。

$user = App\User::find(1);
$user->delete();

削除するモデルのキーがわかっている場合は、
モデルを取得せずとも、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メソッドを使用。

$flight->forceDelete();

laravelは直感的でわかりやすいなーと思いました。

54
40
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
54
40