2017-10-20 37 views
2

J'ai démarré un nouveau projet laravel 5.5 et l'erreur suivante s'affiche lorsque j'essaie d'ajouter une clé étrangère à ma table users: Erreur générale: 1215 Impossible d'ajouter une contrainte de clé étrangère (SQL: alter table users Ajouter une contrainte users_organization_id_foreign clé étrangère (organization_id) références organizations (id) suppression en cascade)Ajout d'une contrainte de clé étrangère avec une migration Laravel

Voici le code de migration pour la table organization:

Schema::create('organizations', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('name'); 
    $table->string('subdomain')->nullable(); 
    $table->timestamps(); 
    $table->softDeletes(); 
}); 

Voici le code de migration pour la table users:

Schema::create('users', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->integer('organization_id')->unsigned(); 
    $table->foreign('organization_id')->references('id')->on('organizations'); 
    $table->string('first_name'); 
    $table->string('last_name'); 
    $table->string('email')->unique(); 
    $table->timestamps(); 
    $table->softDeletes(); 
}); 

J'ai fait des recherches en ligne cette erreur et la chose commune pour vous assurer de sont que les types de données sont les mêmes. D'après ce que je peux voir, ils sont pareils. Ce qui est encore plus fou est que si je lance cette requête dans la base de données directement cela fonctionne:

alter table `users` add constraint `users_organization_id_foreign` foreign key (`organization_id`) references `organizations` (`id`) 

Toute aide est grandement appréciée!

+0

Avez-vous ajouté dbal à votre compositeur.json? Si ce n'est pas le cas, compositeur nécessite doctrine/dbal – pseudoanime

Répondre

3

Par défaut, dans chaque nouvelle installation de Laravel, la table users est créée en premier. Mais puisque vous ajoutez une contrainte dans cette table, vous devez d'abord créer la table organizations.

Alors, mettez la migration de table organizations avant users migration de table en changeant la date de migration organizations dans le nom du fichier:

2014_01_01_000000_create_organizations_table.php 
+1

Merci, cela a résolu mon problème! – three3

0

va de pair avec la réponse de Alexey. Je suggère également que vous activer/désactiver les clés étrangères avant d'exécuter vos migrations:

Schema::disableForeignKeyConstraints(); 
// Your migration code. 
Schema::enableForeignKeyConstraints(); 

De cette façon, vous ne avez pas besoin de renommer vos fichiers de migration.