6

L4 でカスケード ソフト削除を実行するモジュール式の方法はありますか?

私のデータベースは、すべてのテーブルが別のテーブルに関連しているため、ハード削除でこれを行うように既に設計されています..しかし、私はソフト削除を使用しておりdelete()、モデルでメソッドをオーバーロードする必要は本当にありません-単純に(A)モデルの量、および (B)delete()他のモデルが変更されたときにすべてのモデルでメソッドを編集する必要があります。

ポインタやヒントをいただければ幸いです。

4

2 に答える 2

10

モデル イベントを使用してカスケード削除を実行しています。たとえば、製品モデルでは、削除されたイベントにバインドしているため、すべての関係をソフト削除できます。

    // 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();
            }
        });
    }
于 2013-07-04T16:01:00.083 に答える
2

私はこれが私のモデル内から可能であることを知っています:

public function delete() {
  ChildTable::where('parent_id', $this->id)->delete();
  ChildTable2::where('parent_id', $this->id)->delete();
  parent::delete();
}

ただし、モデルまたはテーブル構造を更新すると、これが追加/編集されます..他のモデルを含みます。

于 2013-06-21T20:18:58.373 に答える