2016-08-24 2 views
1

환자가 삭제 될 때 환자와 관련된 기록을 삭제해야하는 Laravel 5.2로 작성된 의료 웹 앱이 있습니다. Eloquent 이벤트로 삭제할 수 없습니다.Laravel 5.2에서 중첩 된 Eloquent 모델 이벤트가 실행되지 않습니까?

환자는 그 환자에게 속한 많은 만남을 가지고 있으며 그 만남에는 그 만남에 속한 많은 EncounterSymptoms가 있습니다. 가 여기 내 데이터베이스 스키마입니다 : 환자가 인식하여 관련 만남 삭제되고 삭제 될 때를 EncounterSymptom should be deleted when an Encounter is deleted.

현재, 내 방법은 환자의 '발견'을 모두 삭제하기 삭제 될 때 설득력 모델 화재 :

//In App\Models\Patient\Patient.php 
public function Encounters(){ 
    return $this->hasMany('App\Models\Patient\Encounter'); 
} 

protected static function boot() { 
    parent::boot(); 

    static::deleting(function($Patient) { 
     $Patient->Encounters()->delete(); 
    }); 
} 
내 만남 모델에서

, 나는이있다 : 어설프게 사용

//In App\Models\Patient\Encounter.php 
    public function EncounterSymptoms(){ 
     return $this->hasMany('App\Models\Encounter\EncounterSymptom'); 
    } 
    protected static function boot() { 
    parent::boot(); 

    static::deleting(function($Encounter) { 
     $Encounter->EncounterSymptoms()->delete(); 
    }); 
    } 

, 나는 관련 Encounte을 삭제했다하는 그것을 삭제 한 다음, 만남의 인스턴스를 선택 rSymptom 레코드가 있지만 환자의 삭제를 호출하면 관련된 모든 Encounters는 성공적으로 삭제되지만 EncounterSymptoms는 삭제되지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

아마도 EncounterSymptoms 테이블을 삭제하는 것이 쉬운 문제 일 수 있습니다. – revo

답변

1

마이그레이션을 사용하는 경우 onDelete 캐스케이드를 설정해야합니다. 예를 들어

상기 상대 테이블을 작성할 때

$table->foreign('patient_id') 
     ->references('id')->on('Patients') 
     ->onDelete('cascade'); 

마찬가지로 EncounterSymptom 테이블 :

$table->foreign('encounter_id') 
     ->references('id')->on('Encounters') 
     ->onDelete('cascade'); 

참조 마이그레이션 - 워드 프로세서>Foreign Key Constraints 부.

관련 문제