2016-03-12 30 views
8

ho installato e configurare il laravel 5.2, il suo bel lavoro, per User ACL ho installato il pacchetto zizaco/entrust durante l'esecuzione di questo comando php artisan migrate (per la creazione di roles, permissions tavolo ecc) ottenendo seguente errorelaravel 5.2 Entrust migrare errore, non è possibile aggiungere vincoli di chiave esterna

[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

Quale potrebbe essere la causa? mi sto perdendo qualcosa ? Ho seguito la guida passo-passo dall'affidare site

risposta

17

Ho risolto il problema, nel file di migrazione di fiducia, c'era il nome di tabella users mancante. vedere seguente riga

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

così ho cambiato a questo,

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

ho aggiunto il nome users tavolo, e problema è stato risolto.

Motivo, perché ho ricevuto questo problema?

in config/auth.php di file, non c'era un 'table'=>'users' chiave/coppia di cui al provider di array, vedi sotto (questo è di default, significa che quando è installato laravel fresca)

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

mentre php artisan entrust:migration eseguito il comando, si tira il nome della tabella users dall'array provider sopra, se non vi è alcuna tabella menzionata nel file di migrazione, set di relazioni vuoti come questo.

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

Quindi, aggiungere la tabella nell'array provider in questo modo.

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

dopo che il comando di marcia per la migrazione affido php artisan entrust:migration questo genererà il file di migrazione corretta.

1

Ho lo stesso errore a volte quando sto cercando di aggiungere chiavi esterne nella stessa migrazione (stesso blocco Schema::create). Se sto creando migrazione dove sto creando nuova colonna:

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

E poi nello stesso file che sto impostando questa colonna come chiave esterna:

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

Funziona perfettamente.

Spero che questo ti possa aiutare.