2016-03-12 13 views
8

ich installiert und konfigurieren Sie den Laravel 5.2, seine Arbeit in Ordnung, für User ACL ich das zizaco/entrust Paket installiert, während dieser Befehl ausgeführt wird php artisan migrate (für die Erstellung von roles, permissions Tabelle usw.) immer folgende FehlerLaravel 5.2 Entrust Fehler migrieren, können Fremdschlüssel-Constraints nicht hinzufügen

[Illuminate\Database\QueryException] SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table role_user add constraint role_user_user_id_foreign foreign key (user_id) references `` (id) on delete cascade on update cascade)

[PDOException] SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint

Was könnte der Grund sein? Fehle ich etwas? Ich folgte der Schritt weise Richtlinie von trust site

Antwort

17

Ich habe das Problem behoben, in der Migrationsdatei zu vertrauen, gab es users Tabellenname fehlt. siehe folgende Zeile

$table->foreign('user_id')->references('id')->on(' ')->onUpdate('cascade')->onDelete('cascade');

Also ich dies geändert,

$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');

Ich fügte die users Tabellennamen und Ausgabe festgelegt ist.

Grund, Warum habe ich dieses Problem?

in config/auth.php Datei, gab es kein 'table'=>'users' key/Paar in Anbieter Array erwähnt, siehe unten (dieser Standard ist, bedeutet, wenn sie frisch Laravel installiert ist)

'providers' => [ 
    'users' => [ 
     'driver' => 'eloquent', 
     'model' => App\User::class, 
    ], 

während php artisan entrust:migration Befehl ausgeführt wird, es zieht Der users Tabellenname aus dem obigen Provider-Array. Wenn in der Migrationsdatei keine Tabelle aufgeführt ist, wird die Beziehung so leer gesetzt.

$table->foreign('user_id')->references('id')->on('')->onUpdate('cascade')->onDelete('cascade');

Also, fügen Sie Tabelle in Provider-Array wie folgt.

'providers' => [ 
    'users' => [ 
     'driver' => 'eloquent', 
     'model' => App\User::class, 
     'table'=>'users' 
    ], 

nach dem Startbefehl für entrust Migration php artisan entrust:migration dies die richtige Migrationsdatei generieren.

1

Ich bekomme den gleichen Fehler manchmal, wenn ich versuche, Fremdschlüssel in der gleichen Migration hinzufügen (selbe Schema::create Block). Wenn ich Migration bin zu schaffen, wo ich die Schaffung neuer Spalte:

Schema::create(... 
    ... 
    $table->integer('categories_id')->unsigned(); 
    ... 
}); 

Und dann in der gleichen Datei diese Spalte als Fremdschlüssel Ich gründe:

Schema::table('sub_categories', function (Blueprint $table) { 
    $table->foreign('categories_id')->references('id')->on('main_categories'); 
}); 

Es funktioniert perfekt.

Hoffe, das wird Ihnen helfen.