2016-05-04 11 views
1

私は使用方法が不思議でしたLaravels softdelete MySql foreign key restrictのようなものがあります。Laravel外部キーと制限付きのソフト削除?

既にフレームワークに何かが組み込まれていますか? Softdeleteはすでに動作していますが、私は関連するモデルに対して何らかのバリデーションが必要です。例えば

おかげで、彼らは削除ソフト持っLaravelに

答えて

0

はい、models.ToがモデルにこのIlluminate\Database\Eloquent\SoftDeletes形質を使用して追加し、ユーザーにエラーメッセージが「それHAST 5関連レコードがため、この項目を削除することはできません」 deleted_atの列を$datesに設定します。

彼らはまた、彼らのクエリソフト削除モデルを持っています。あなたは誰でも選ぶことができます。

あなたはhere.

+0

Softdeleteが既に働いている:あなたは例のために何ができるか

はオブザーバー(event listener)を使用するかのような例deleting/deletedためeloquent model eventsを使用することです。ただし、項目が実際には削除されないため、mysqlのキー制約は無視されます。 – fabian

+0

「これは5つの関連レコードがあるので、このアイテムを削除することはできません」これはjavascriptでこれを行うことができます。 –

0

ありますこれについてのすべてのドキュメントを取得することができますが、ソフト削除の「unpluging」DB関係のためのソリューションには、ビルドではありません。

public function boot() 
{ 
    User::deleted(function ($user) { 
     if ($user->deleted_at) { 
      // here You have to unplug all the dependencies 
     } 
    }); 
} 
+1

'deleting'イベントの使用をお勧めします。モデルがソフト削除を使用していても、 'deleted' /' deleted'イベントは引き続き使用されます。さらに、OPのようなサウンドは削除を防止したいかもしれないので、beforeイベントがより適切でしょう。 – patricus

+0

はい、可能ですが、私はソフト削除の方が安全だと思います(この日付を別の場所に設定した方が安全でしょう) –

+1

ソフトならば 'saving' /' saved'イベントが呼び出されますかレコードを削除しますか?コードを見ると、クエリビルダーの更新を使用してソフト削除が実行されるように見えます。つまり、 'saving' /' saved'イベントは呼び出されません。 – patricus

関連する問題