Ich habe eine Viele-zu-viele-Beziehung zwischen Benutzer & Role mit einer role_user-Tabelle. Meine Migrationen sind Setup als so (vereinfacht):Laravel-Fremdschlüssel onDelete ('cascade') funktioniert nicht
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');
});
}
So wie pro die docs, Ich habe meine Fremdschlüssel auf unsigniert gesetzt.
Jetzt füge ich ein paar Benutzer hinzu, und fügen Sie einige Rollen hinzu - alles funktioniert gut. Wenn ich jedoch einen Benutzer lösche (User::destroy(2)
), werden die Zeilen für diesen Benutzer in der Tabelle role_user
nicht gelöscht, was zu redundanten Zeilen führt.
Was mache ich falsch?
- MySQL + InnoDB
EDIT: das Modell Grabbing und ->delete();
Anwendung hat auch die gleiche Wirkung.
Haben Sie Beziehungen in MySQL erstellt? Überprüfen Sie Ihre Tabellenstruktur in Software wie PHPMyAdmin. Versuchen Sie auch, '$ table-> integer ('user_id') zu entfernen -> unsigned();' –
Ich habe PHPMyAdmin installiert - wo sehe ich die Beziehungen? Will einen Blick haben. – Alias
http://www.binarytides.com/blog/wp-content/uploads/2009/08/phpmyadmin_relation_view-600x443.png Dies kann helfen –