2017-09-21 1 views
0

enter image description here Je suis nouveau à Laravel. J'ai précédemment créé la table users. employment La table a été créée dans les migrations. Comme la prochaine migration, j'ai modifier users tableau pour ajouter job_id dans employment table à users tableau. Lorsque j'exécute des migrations, cela donne une erreur ci-dessus.(errno: 150 "La contrainte de clé étrangère est incorrectement formée")

Note: Je dois donner job_id dans le tableau employment au tableau users comme job_id. soumya est le nom de ma base de données

Lorsque j'exécute des migrations sans la contrainte de clé étrangère, cela fonctionne parfaitement.

Migations: table d'emploi

public function up() 
{ 
    Schema::create('employment', function (Blueprint $table) { 
     $table->increments('job_id'); 
     $table->string('job_title'); 
     $table->string('job_description')->nullable()->default(NULL); 
     $table->string('slug')->unique(); 


     $table->timestamps(); 
    }); 
} 
    public function down() 
{ 
    Schema::drop('employment'); 
} 

Migrations modifiant users Table

public function up() 
{ 
    Schema::table('users', function (Blueprint $table) { 
     $table->integer('job_id')->after('deleted'); 
     $table->foreign('job_id')->references('job_id')->on('employment'); 
    }); 
} 

public function down() 
{ 
    Schema::table('users', function (Blueprint $table) { 
     $table->dropForeign('users_job_id_foreign'); 
     $table->dropColumn('job_id'); 

    }); 
} 
+0

l'erreur est purement liée à mysql, pas à php ni laravel, https://stackoverflow.com/search?q=Foreign+key+contraint+is+incorrectly+formed, une fois que vous avez la cause de l'erreur dans mysql le modifier du côté php sera une paix de gâteau. – hassan

+0

Copie possible de [Migration: Impossible d'ajouter une contrainte de clé étrangère dans laravel] (https://stackoverflow.com/questions/22615926/migration-cannot-add-foreign-key-constraint-in-laravel) – hassan

+0

Essayez de changer cela ' $ table-> entier ('job_id') -> après ('deleted'); 'à ce' $ table-> unsignedInteger ('job_id') -> après ('deleted'); ' – Maraboc

Répondre

0

changement votre migration des utilisateurs comme celui-ci

public function up() 
{ 
    Schema::table('users', function (Blueprint $table) { 
     $table->unsignedInteger('job_id'); 
     $table->foreign('job_id')->references('job_id')->on('employment'); 
    }); 
} 
+0

Donne une erreur Integrity Violation – Shyamali

+0

mmm pouvez-vous me montrer l'erreur complète? –

+0

J'ai ajouté une capture d'écran. "soumya" est le nom de ma base de données – Shyamali

0

Dans Laravel, les tables sont migrés sur la première come- premier servi. Assurez-vous que la table à laquelle votre clé étrangère fait référence est migrée avant la table qui contient la clé étrangère.

Pour cela, vous pouvez modifier les noms des fichiers de migration de sorte que les tables de migration pour les utilisateurs existent avant la migration de la table d'emploi dans le répertoire du projet.