Внешний ключ Laravel onDelete («каскад») не работает
У меня есть отношение многие ко многим между пользователем и ролью с таблицей 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');
});
}
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');
});
}
Итак, в соответствии с документами, я установил свои внешние ключи без знака.
Теперь я добавляю пару пользователей и прикрепляю некоторые роли - все работает отлично. Тем не менее, когда я удаляю пользователя (User::destroy(2)
) строки для этого пользователя вrole_user
таблица не удаляется, что приводит к избыточным строкам.
Что я делаю неправильно?
MySQL + InnoDBРЕДАКТИРОВАТЬ: захват модели и применение->delete();
также имеет тот же эффект.