Laravel-Fremdschlüssel onDelete ('cascade') funktioniert nicht
Ich habe eine Viele-zu-Viele-Beziehung zwischen Benutzer und Rolle mit einer Tabelle role_user. Meine Migrationen sind so eingerichtet (vereinfacht):
users
Tabelle:
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('email')->unique();
});
}
roles
Tabelle:
public function up()
{
Schema::create('roles', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
});
}
role_user
Tabelle:
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');
});
}
Also habe ich laut Dokumentation meine Fremdschlüssel auf unsigniert gesetzt.
Jetzt füge ich ein paar Benutzer hinzu und füge einige Rollen hinzu - alles funktioniert einwandfrei. Wenn ich jedoch einen Benutzer lösche (User::destroy(2)
) die Zeilen für diesen Benutzer in derrole_user
Tabelle werden nicht gelöscht, was zu redundanten Zeilen führt.
Was mache ich falsch?
MySQL + InnoDBBEARBEITEN: Greifen Sie nach dem Modell und bewerben Sie sich->delete();
hat auch den gleichen Effekt.