【问题标题】:OnDelete-Cascade is not being "fired"OnDelete-Cascade 没有被“解雇”
【发布时间】:2021-04-05 13:59:46
【问题描述】:

我坚持这一点:

我得到了一些这样的迁移:

<?php

Schema::create('product_categories', function ( $table) {
    $table->bigIncrements('id');
    $table->timestamps();
});


Schema::create('products', function ( $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('category_id')->nullable();
    $table->foreign('category_id')->references('id')->on('product_categories')->onDelete('cascade');
});

这会导致:

CREATE TABLE `product` (
 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
 `category_id` bigint(20) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `product_category_id_foreign` (`category_id`),
  CONSTRAINT `product_category_id_foreign` FOREIGN KEY (`category_id`) REFERENCES `product_categories` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

但如果我删除 product 行,category-row 将保持不变。

知道我犯了什么错误吗?

【问题讨论】:

  • 你到底想达到什么目的?您有 3 个表产品、类别和数据透视表产品类别?
  • 反之亦然。如果您删除一个类别,该类别的所有产品也将被删除。

标签: sql laravel eloquent mariadb


【解决方案1】:

所以现在它只会在删除 product_category 引用时删除您的产品,因为这就是您引用它的方式。

我假设有您尚未链接的类别表?如果您希望在要删除的产品上删除类别,则必须在类别表中以 -&gt;onDelete('cascade') 结尾引用该产品。虽然我不确定这是可取的,但我认为这就是你想要做的?

【讨论】:

    猜你喜欢
    • 2018-11-25
    • 2020-03-28
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    相关资源
    最近更新 更多