2016-12-29 10 views
0

Laravelでは他の同一のログテーブルにソフト削除されたアイテムを持つことができますか? 他のテーブルのすべてのソフト削除ファイル。Laravel - ソフト削除 - 他のテーブルへのポストの移動

しばらくしてからすべてのデータを削除するには、ログテーブルのイベントスケジューラ(http://dev.mysql.com/doc/refman/5.6/en/events-overview.html)を作成します。

+1

あなた自身。 – Jerodev

答えて

2

これを行うにはいくつかの方法があります。あなたが実際にしたい場合は

MyModel::deleting(function($model) { 
    DeletedItems::create([ 
     // Your model fields here 
    ]); 
}); 

- または -

:あなたは別のテーブルに削除された項目を挿入したい場合、あなたはこのアクションは削除イベントにするために起こるしたいモデルにmodel listenerを登録それらがソフト削除されてから一定期間後にデータベースから項目を削除すると、Scheduled Taskを使用することをお勧めします。ソフト削除はタイムスタンプを与えるので、あなたのタスクで参照することができます。

例えば、以下はソフトヶ月以上のために削除されたすべてのモデルを削除します:

protected function schedule(Schedule $schedule) 
{ 
    $schedule->call(function() { 
     MyModel::withTrashed() 
      ->whereDate('deleted_at', '<', Carbon::today()->subMonth()) 
      ->forceDelete(); 
    })->daily(); 
} 
Laravelは、箱から出して、これを行うことはできませんが、これを書くためにそれが困難にすることはできません
+0

2番目の解決策は本当に素晴らしいようですが、他のデータベースに移動することは統計的にはうまくいくでしょう。最初から削除し、データを統計ページに入れてください。最初の解決策は、私が考えている伐採には良いようです。 – Maximi

+0

なぜ両方をしないのですか?モデルオブザーバの代わりに、タスクで、削除しようとしているレコードを別のテーブルに挿入してから削除するロジックを作成します。 –

関連する問題