Laravel foreign key onDelete ('cascade') не работает

Laravel foreign key onDelete ('cascade') не работает

23.07.2014 12:34:25 Просмотров 63 Источник

У меня есть отношение "многие ко многим" между Пользователем и ролью, с таблицей role_user. Мои миграции настраиваются так (упрощенно):

users

public function up() { Schema::create('users', function(Blueprint $table) { $table->increments('id'); $table->string('email')->unique(); }); }

roles:

public function up()
{
    Schema::create('roles', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('name');
    });
}

Итак, согласно документам, я установил свои внешние ключи в unsigned.

Теперь я добавляю пару пользователей и прикрепляю некоторые роли - все работает нормально. Однако, когда я удаляю пользователя (role_user), строки для этого пользователя в public function up() { Schema::create('role_user', function(Blueprint $table) { $table->increments('id'); $table->integer('user_id')->unsigned(); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->integer('role_id')->unsigned(); $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade'); }); } также имеет тот же эффект.

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/24897300/laravel-foreign-key-ondeletecascade-not-working#comment38678459_24897300
У меня установлен PHPMyAdmin - где я могу просмотреть отношения? Будет иметь Гусак.
https://stackoverflow.com/questions/24897300/laravel-foreign-key-ondeletecascade-not-working#comment38678593_24897300
Нет, там ничего нет. Запутанным... во время миграции ошибок не возникает.
https://stackoverflow.com/questions/24897300/laravel-foreign-key-ondeletecascade-not-working#comment38678696_24897300
Таким образом, в PHPMyAdmin нет никаких отношений? Что-то должно быть не так со схемой в этом случае. Я бы включил протоколирование запросов и проверил их во время миграции.
https://stackoverflow.com/questions/24897300/laravel-foreign-key-ondeletecascade-not-working#comment38678998_24897300
Проверьте еще раз запросы. Там будет описана проблема. Если это ошибка с табличным движком, пожалуйста, сообщите об этом на laravel github. Удачи вам с вашим приложением.
https://stackoverflow.com/questions/24897300/laravel-foreign-key-ondeletecascade-not-working#comment48554032_24897300
Я нашел эту проблему, и комментарий выше о настройке механизма таблиц вручную исправил эту проблему. Я подал ошибку: github.com/laravel/framework/issues/8730

Ответы - Laravel foreign key onDelete ('cascade') не работает / Laravel foreign key onDelete('cascade') not working

Является ответом!
Jake

14.05.2015 12:02:46

Попробуйте установить при попытке создать эту таблицу. Это исправление сработало для меня.

$table->engine = 'InnoDB';

Я подал ошибку под: https://github.com/laravel/framework/issues/8730

https://stackoverflow.com/questions/24897300/laravel-foreign-key-ondeletecascade-not-working/30225134#comment67328860_30225134
Эта проблема возникает, скорее всего, потому, что механизм таблиц по умолчанию в вашем экземпляре MySQL установлен на MyISAM, который не поддерживает внешние ключи. Попытка работать с внешними ключами на столе MyISAM определенно не будет ошибкой в Laravel. Хотя было бы неплохо, если бы конструктор схем мог автоматически установить движок в InnoDB, если используются внешние ключи.
https://stackoverflow.com/questions/24897300/laravel-foreign-key-ondeletecascade-not-working/30225134#comment74689249_30225134
Убедитесь, что вы добавляете его во все миграции, иначе он не будет работать.
STWilson

12.10.2016 07:16:48

Проверьте конфигурацию MySQL. мой.ini все еще может иметь default-storage-engine=MYISAM. Установите значение по default-storage-engine=InnoDB, и вы должны избегать проблем с добавлением этого исправления к каждой миграции.

https://stackoverflow.com/questions/24897300/laravel-foreign-key-ondeletecascade-not-working/40003492#comment100566932_40003492
После изменения my.iniна локальном компьютере разработчика под Windows & WAMP не забудьте перезапустить службы WAMP (щелкните левой кнопкой мыши на значке панели задач и выберите перезапустить все службы)
Muaath Alhaddad

16.11.2019 11:33:33

даже после изменения движка на InnoDBв Config - >Database это не работает

и решение для этого-изменить миграцию

От

Schema::create('users', function (Blueprint $table) { $table->BigIncrements('id');

К

Schema::create('users', function (Blueprint $table) { $table->increments('id');

Закрыть X