2017-09-21 114 views
0

enter image description here我是Laravel的新手。我以前創建了users表。 employment表已在遷移中創建。作爲下一次遷移我已經改變users表添加job_idemployment表到users表。當我運行遷移時,會出現上述錯誤。(錯誤:150「外鍵約束不正確」)

注意:我需要在employment表中給job_idusers表作爲job_idsoumya是我的數據庫名稱

當我運行沒有外鍵約束的遷移時,它可以很好地工作。

Migations:就業表

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'); 
} 

遷移改變users

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

該錯誤純粹與mysql有關,不是php也不是laravel,一旦你在mysql中得到了錯誤原因在PHP方面編輯將是一個和平的蛋糕。 – hassan

+0

[遷移:無法在laravel中添加外鍵約束]可能的重複(https://stackoverflow.com/questions/22615926/migration-cannot-add-foreign-key-constraint-in-laravel) – hassan

+0

嘗試更改此' ('deleted');'到'this'$ table-> unsignedInteger('job_id') - > after('deleted');' – Maraboc

回答

0

改變這樣

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

給出錯誤完整性違規 – Shyamali

+0

mmm你能告訴我完整的錯誤嗎? –

+0

我添加了屏幕截圖。 「soumya」是我的數據庫名稱 – Shyamali

0

在laravel您的用戶遷移,表上的第一先到遷移先到先得。確保外鍵所引用的表在包含外鍵的表之前被遷移。

爲此,您可以更改遷移文件的名稱,以便在遷移項目目錄中的工作表之前存在用戶表的遷移。