【问题标题】:Laravel how to forceDelete all related models with parent?Laravel如何强制删除所有与父相关的模型?
【发布时间】:2018-07-25 22:29:21
【问题描述】:

我正在尝试强制删除具有一种关系的模型。我在模型中为此做了一个自定义函数。

    /**
     * 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 方法,但它给了我相同的结果。 如何强制删除两个模型?

【问题讨论】:

  • 你用$this-> forceDelete()代替parent::forceDelete()吗?
  • @OluwatobiSamuelOmisakin 都试过了
  • 很想知道为什么这个不起作用工作
  • @MrCarrot 我仍然不知道为什么这不起作用,但答案中的方法非常有效! :)

标签: laravel


【解决方案1】:

您可以像这样在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();

我希望它有效:)

【讨论】:

    【解决方案2】:

    我建议对您的迁移使用级联删除

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

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

    【讨论】:

      猜你喜欢
      • 2018-05-31
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多