在Laravel 5.2中没有触发的嵌套Eloquent模型事件?

时间:2016-08-24 09:04:01

标签: php laravel laravel-5.2

我有一个使用Laravel 5.2构建的医疗网络应用程序,我需要删除与患者相关的记录。我无法用Eloquent事件删除它们。

患者有许多属于该患者的遭遇,并且该遭遇具有许多属于该遭遇的遭遇症状。 这是我的数据库架构: 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();
    });
    }

使用修补程序,我选择了一个Encounter实例,然后将其删除,删除了相关的EncounterSymptom记录,但当我在患者上调用删除时,所有相关的遭遇都被成功删除,但EncounterSymptoms则没有。我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果您正在使用迁移,则需要设置onDelete级联。

例如,在创建Encounters表时:

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

同样,在EncounterSymptom表上:

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

请参阅迁移 - >文档中的Foreign Key Constraints部分。