参考:https://readouble.com/laravel/5.3/ja/eloquent.html
普通の削除方法
$flight = App\Flight::find(1);
$flight->delete();
ここは問題ないですね。
id=1を削除したい時はfindでモデルを検索して、delete()
で削除
ソフトデリートとは
ソフトデリートは実際にDBからレコードを削除せずに、削除したように見せかける技です。
deleted_atカラムに日時を追加することで、検索できないようになります。
通常はnullにすることで表示対象になります。
ソフトデリート方法
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Flight extends Model
{
use SoftDeletes;
/**
* 日付へキャストする属性
*
* @var array
*/
protected $dates = ['deleted_at'];
}
参考からのコピペですが、これは必ず必要みたいです。
Schema::table('flights', function ($table) {
$table->softDeletes();
});
デリートカラムを追加します。
あとは通常のデリートと同じくdelete()
で削除するとソフトデリートできるらしい。
簡単!
ソフトデリート済みモデルを取得したい
削除はしたけど過去の情報は残しておきたい。そんな時も大丈夫。
$flights = App\Flight::withTrashed()
->where('account_id', 1)
->get();
これでアカウントID=1の人の過去のフライト情報を取得することができるんですね。
$flight->history()->withTrashed()->get();
リレーションしていても使える
デリートされたモデルのみ取得
$flights = App\Flight::onlyTrashed()
->where('airline_id', 1)
->get();
ソフトデリートの復活
ソフトデリートにする目的として復活させたいというのがあります。
削除したアカウントの情報を保持しておけば、再登録した時に途中から始めることができます。
$flight->restore();
これだけみたいです。
今回使いたかった機能はこれだけなのでこれ以上は書きませんが、参考URLにはもっと詳しく書いてあります。