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は直感的でわかりやすいなーと思いました。