Laravel如何与父级一起强制删除所有相关模型?

时间:2018-07-25 13:17:29

标签: laravel

我正在尝试通过一种关系强制删除模型。我在模型中为此做了一个自定义功能。

    /**
     * Force delete active ingredient with relationships
     * @return bool|null
     * @throws \Exception
     */
    public function bruteDelete()
    {
        $this->brandPresentations()->forceDelete();
        return parent::forceDelete();
    }

这就是我调用该函数的方式

Active_ingredients::withTrashed()->find($request->get('elementID'))->bruteDelete();

哪个力量可以完美删除brandPresentations。但是它会软删除父级active_ingredients

我试图使用forceDelete()作为函数名来覆盖Laravel方法,但是它给了我相同的结果。 如何强制删除两个模型?

2 个答案:

答案 0 :(得分:2)

您可以像这样在boot方法中使用它。

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

    self::deleting(function (User $model) {
        if ($model->forceDeleting){
            $model->brandPresentations()->forceDelete();
        }
    });
}

然后运行forceDelete

Active_ingredients::withTrashed()->find($request->get('elementID'))->forceDelete();

我希望它能起作用:)

答案 1 :(得分:0)

我建议您在迁移中使用级联删除

$table->foreign('model_id')->references('id')->on('models')->onDelete('cascade');

通过调用$item->forceDelete(),其所有相关外键也将被删除。
我很确定这不适用于软删除。