【问题标题】:cannot delete parent with children existing Laravel CRUD无法删除现有 Laravel CRUD 的父级
【发布时间】:2014-06-11 05:01:30
【问题描述】:

这是我尝试删除包含该父类别下产品的类别条目时引发的错误:

Illuminate \ Database \ QueryException
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent     row: a foreign key constraint fails (`store`.`products`, CONSTRAINT     `products_category_id_foreign` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`))    (SQL: delete from `categories` where `id` = 1)

在我做了一些研究之后,我知道你不能删除现有孩子的父母

当我删除类别 ID 时,我不确定如何使用我的类别 ID 加入产品。这样我就可以删除所有具有相关类别 ID 的产品。

这是我的删除功能:

public function postDestroy() {
    $category = Category::find(Input::get('id'));

    if ($category) {
        $category->delete();
        return Redirect::to('admin/categories/index')
            ->with('message', 'Category Deleted');
    }

    return Redirect::to('admin/categories/index')
        ->with('message', 'Something went wrong, please try again');

} 

【问题讨论】:

标签: sql laravel crud


【解决方案1】:

如果您想删除任何具有相同类别的产品,我会将您扩展 eloquent 的类别类更改为如下内容:

class Category extends Eloquent
{
    // ... all your existing code...
    public function delete()
    {
        // Delete all of the products that have the same ids...
        Products::where("category_id", $this->id)->delete();

        // Finally, delete this category...
        return parent::delete();
    }
}

现在调用 $category->delete() 将删除所有具有相同 category_id 的产品,以及该类别本身。

【讨论】:

  • 谢谢@timgws。 Here 是我原来的控制器。 Here 是更新后的控制器,我在其中添加了您的建议,但仍然出现错误。
  • 如果我将 extends Basecontroller 更改为 Eloquent 我会出错。
  • 是的,因为您正在编辑控制器。你不需要编辑你的控制器,编辑你的model。更改 app/models 中的类别模型(应该扩展 Eloquent)。这样您就可以保持$category->delete 和控制器的其余部分不变。以后当你删除一个分类时,它会删除与之关联的产品!
  • 我有另一个问题要发布,这与在创建它们的同一页面上更新产品有关。如果我无法弄清楚,如果您不介意,我会回到这篇文章并发布问题链接。
猜你喜欢
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 2018-01-02
  • 1970-01-01
相关资源
最近更新 更多