【问题标题】:What is the best practice to delete all relationships in Laravel?在 Laravel 中删除所有关系的最佳做法是什么?
【发布时间】:2017-01-06 07:38:15
【问题描述】:

我需要删除产品的所有关系。尝试删除具有关系的项目时出现错误。这是我的代码:

public function getDelete(Product $product)
{
    $name = $product->name;

    $product->Field()->Data()->delete();
    $product->Field()->delete();
    $product->delete();

    return redirect('products')->with('success', 'Product <b>'.$name.'</b> successfully deleted.');
}

这里是模型:

public function Field()
{
    return $this->hasMany("\App\ProductField", 'product_id','id');
}

public function Data()
{
    return $this->hasMany("\App\ProductFieldData", 'product_field_id','id');
}

Builder.php 第 2101 行中的 BadMethodCallException:调用未定义 方法 Illuminate\Database\Query\Builder::Data()

如果产品没有 ProductFieldData,我会收到此错误。但是我认为如果没有关系数据,必须跳过它?

如何删除产品所有关系?

【问题讨论】:

    标签: php laravel laravel-5.1


    【解决方案1】:

    试试这个:

    foreach ($product->Field()->Data as $data) {
        $data->delete();
    }
    

    您正在处理一个集合,并且您无法对项目集合执行删除功能,因此您必须对其进行迭代。

    顺便说一句,您不应该使用ON DELETE CASCADE 来执行此操作吗?您应该对此进行一些研究,它会为您节省很多时间!

    【讨论】:

    • 同样的错误 ;) 我在删除级联上添加了外键和设置,但我需要先由 Laravel 删除
    • @Haroldas 有用吗?如果你接受这个作为答案会很高兴:)
    猜你喜欢
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 2012-08-07
    相关资源
    最近更新 更多