php - Laravel CRUD 删除不适用于外键

标签 php mysql laravel laravel-5

我与数据库中的category_id 列有外部关系,但在删除时出现错误。 这是我的删除代码:

  public function destroy($id)
{
    $category = Category::find($id);
    $category->delete();
    Session::flash('success', 'The category was successfully deleted.');
    return redirect()->route('categories.index');
}

我看到的错误是:

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

请帮忙。

最佳答案

我的赌注是将外键设置为 ON DELETE RESTRICT 而不是 CASCADE。

Cannot delete or update a parent row: a foreign key constraint fails (fitilicious.products, CONSTRAINT products_category_id_foreign FOREIGN KEY (category_id) REFERENCES categories (id)) (SQL: delete from categories where id = 2)

这告诉我们表“products”中有一行引用了您尝试删除的类别。

  • ON DELETE CASCADE 也会删除该产品。
  • ON DELETE RESTRICT 将阻止删除非空类别
  • ON DELETE SET NULL 将删除产品表中的类别并将category_id 设置为 NULL

每种都有其用途,但您需要选择您需要的。

关于php - Laravel CRUD 删除不适用于外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43123453/

相关文章:

php - 在 Laravel 中使用 Mass Assignment 将变量从 Controller 传递到模型

php - Yii2/PostgreSQL - 调用未知方法:yii\db\ActiveQuery::formName()

mysql - 从数据库中获取所有订单 - 只返回一行

php - 获取排除少数用户的特定用户列表

php - 在多个值中搜索始终返回 1 个结果

php - 如何在 faker 生成器中定义外部方法?

php - Laravel 5.3,检查上传的文件是否大于 upload_max_filesize(可选上传)

Postgresql INSERT 查询的 PHP 语法错误

php - 如果插入语句之一失败,如何从数据库中删除数据

php - Laravel - 迁移(向表添加索引会引发错误)