Chave estrangeira do Laravel onDelete ('cascade') não está funcionando

Eu tenho um relacionamento muitos para muitos entre Usuário e Função, com uma tabela role_user. Minhas migrações estão configuradas da seguinte maneira (simplificadas):

users mesa:

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

roles mesa:

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

role_user mesa:

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');
    });
}

De acordo com os documentos, defino minhas chaves estrangeiras como não assinadas.

Agora, adiciono alguns usuários e anexo algumas funções - tudo funciona bem. No entanto, quando eu excluo um usuário (User::destroy(2)) as linhas para esse usuário norole_user A tabela não é excluída, o que está causando linhas redundantes.

O que estou fazendo errado?

MySQL + InnoDB

EDIT: Agarrando o modelo e aplicando->delete(); também tem o mesmo efeito.

questionAnswers(2)

yourAnswerToTheQuestion