在Laravel中删除所有关系的最佳实践是什么?


What is the best practice to delete all relationships in Laravel?

我需要删除产品的所有关系。当我试图删除具有关系的项目时,我遇到了错误。下面是我的代码:

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:调用未定义方法阐明' '数据库查询' Builder::数据()

如果产品没有ProductFieldData,我得到这个错误。但我认为它必须跳过如果没有关系的数据?

如何删除产品所有关系?

试试这个:

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

你正在处理一个集合,你不能在一个集合上执行delete函数,所以你必须迭代它。

顺便说一下,你不应该使用ON DELETE CASCADE吗?你应该做一些研究,这会节省你很多时间!