2013-06-21 4 views
6

L4에서 계단식 소프트 삭제를 수행 할 수있는 모듈 식 방법이 있습니까?Laravel 4 계단식 소프트 삭제

내 데이터베이스는 모든 테이블이 다른 테이블과 관련되어 있기 때문에 이미 하드 삭제로이를 수행하도록 설계되었습니다. 그러나 소프트 삭제를 사용하고 있으며 내 모델에서 delete() 메소드를 과부하하고 싶지 않습니다. (A) 모델의 양, (B) 다른 모델이 변경 될 때 모든 모델에서 delete() 메소드를 편집해야합니다.

모든 도움말 또는 정보를 제공해 주시면 감사하겠습니다.

답변

2

나는이 내 모델 내에서 가능하다 알고 :

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

그러나 모델이나 테이블 구조에 대한 갱신이 다른 모델을 포함 .. 편집/추가되도록 할 것입니다.

+0

이 답변이나 질문의 ​​일부를 ? –

+1

둘 다 : 수동으로 삭제 (또는 부모 테이블 child_id 재 할당) 할 수있는 방법을 나타냅니다. 그러나, 그런 삭제의 모듈 방식은 좋을 것이다; Eloquent가 관계와 어떻게 작용하는지 등. 내 말은 .. 관계가 이미 존재하기 때문에 정의 된 관계에 대해 계단식 소프트 삭제를 시도해보십시오. –

+0

http://stackoverflow.com/a/14176326/3986937 @Chris Schmitz은 마이그레이션에서이 동작을 추가 할 수 있다고 지적했습니다. – Logus

10

나는 모든 관계 소프트 삭제할 수 있도록 내가 삭제 된 이벤트에 바인딩 제품 모델에서, 예를 들어 model events를 사용하여 작업 삭제를 계단식있어 :

// 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(); 
      } 
     }); 
    } 
+1

Taylor는 Model :: deleted() 및 Model :: deleted() 핸들러를 사용하기 위해 [권장] (https://github.com/laravel/framework/issues/357#issuecomment-15470365) –

+0

Chris Schmitz는 마이그레이션에서이 동작을 추가 할 수 있습니다. http://stackoverflow.com/a/14176326/3986937 – Logus