#sql #laravel #eloquent #mariadb
#sql #laravel #красноречивый #mariadb
Вопрос:
Я застрял на этом моменте:
Я получил несколько таких миграций:
<?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 останется нетронутой.
Есть идеи, какую ошибку я допустил?
Комментарии:
1. чего именно вы хотите достичь? у вас есть 3 таблицы продукты, категории и сводная таблица категории продуктов?
2. Это работает наоборот. Если вы удалите категорию, все товары с этой категорией также будут удалены.
Ответ №1:
Итак, прямо сейчас он удалит ваш продукт только при удалении ссылки product_category, поскольку именно так вы на него ссылались.
Я предполагаю, что есть ваша таблица категорий, которую вы не связали? Если вы хотите, чтобы категория была удалена при удаляемом продукте, вам нужно будет ссылаться на продукт в вашей таблице категорий с ->onDelete('cascade')
в конце. Хотя я не уверен, что это желательно, но я думаю, что это то, что вы пытаетесь сделать?