L4 でカスケード ソフト削除を実行するモジュール式の方法はありますか?
私のデータベースは、すべてのテーブルが別のテーブルに関連しているため、ハード削除でこれを行うように既に設計されています..しかし、私はソフト削除を使用しておりdelete()
、モデルでメソッドをオーバーロードする必要は本当にありません-単純に(A)モデルの量、および (B)delete()
他のモデルが変更されたときにすべてのモデルでメソッドを編集する必要があります。
ポインタやヒントをいただければ幸いです。
モデル イベントを使用してカスケード削除を実行しています。たとえば、製品モデルでは、削除されたイベントにバインドしているため、すべての関係をソフト削除できます。
// Laravel's equivalent to calling the constructor on a model
public static function boot()
{
// make the parent (Eloquent) boot method run
parent::boot();
// cause a soft delete of a product to cascade to children so they are also soft deleted
static::deleted(function($product)
{
$product->images()->delete();
$product->descriptions()->delete();
foreach($product->variants as $variant)
{
$variant->options()->delete();
$variant->delete();
}
});
}
私はこれが私のモデル内から可能であることを知っています:
public function delete() {
ChildTable::where('parent_id', $this->id)->delete();
ChildTable2::where('parent_id', $this->id)->delete();
parent::delete();
}
ただし、モデルまたはテーブル構造を更新すると、これが追加/編集されます..他のモデルを含みます。