【问题标题】:Eloquent model events not firing when using relations使用关系时没有触发 Eloquent 模型事件
【发布时间】:2014-12-14 07:27:17
【问题描述】:

我有一个用于软删除子级的典型事件挂钩:

public static function boot()
{
    parent::boot();
    static::deleted(function($model1)
    {
        $model1->hasmanyrelation()->delete();
    });
}

public function hasmanyrelation()
{
    return $this->hasMany('Model2');
}

现在当我使用时:

$model0->model1->each(function($model1){$model1->delete();});

一切正常,模型 1 的模型 2 子节点被(软)删除。但是当我使用时:

$model0->model1()->delete();

然后所有相关的 model1 记录都将被删除,但 model2 及其所有记录保持不变。后一种更简单的语法(删除 model1 记录但跳过其模型事件)有什么问题??

【问题讨论】:

    标签: events laravel model eloquent


    【解决方案1】:

    这是一个旧的,它仍然可以帮助某人......

    应首先“拉动”模型以触发事件。

    See Official Answer Here

    【讨论】:

    • 更新也会发生同样的事情。让我挠了一阵子,但原因是有道理的。您需要在触发任何事件之前实例化模型实例并显式删除或更新它。 $model->where(...)->update([...]); 等语句只运行 SQL,不涉及模型和事件。
    【解决方案2】:

    重构这个:

    $model1->hasmanyrelation()->delete();
    

    $models = $model1->hasmanyrelation;
    foreach($models as $model){
        $model->delete()
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 2016-12-31
      • 1970-01-01
      • 2023-03-22
      • 2017-05-08
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多