2016-03-05 135 views
0

我第一次創造了所有的表,而不用自己的外鍵,然後我添加了外鍵的每個表,從第一個表,我得到這個錯誤:不能添加外鍵約束Laravel 5.1

SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL 
    : alter table `accounts` add constraint accounts_client_id_foreign foreign 
    key (`client_id`) references `clients` (`id`)) 

這裏的我的代碼:

public function up() 
    { 
     Schema::create('accounts', function(Blueprint $table) 
     { 
     $table->engine = 'InnoDB'; 

     $table->bigInteger('id'); 

     $table->integer('client_id')->unsigned(); 
     $table->foreign('client_id')->references('id')->on('clients'); 

     $table->integer('emp_id')->unsigned(); 
     $table->foreign('emp_id')->references('id')->on('employees'); 

     $table->string('type'); 

     $table->timestamps(); 
    }); 
} 

我嘗試沒有$表 - >引擎= 'InnoDB的';但同樣的錯誤

另外,我試圖分開外鍵:

Schema::table('accounts', function($table) { 
     $table->foreign('client_id')->references('id')->on('clients'); 
     $table->foreign('emp_id')->references('id')->on('employees'); 
    }); 

我得到這個錯誤:

Base table or view already exists: 1050 Table 'accounts' already exists 

所以,當我刪除和重新遷移我得到的第一個錯誤

所以發生了什麼?

+1

表中的數據不符合fk約束嗎?你可以嘗試向外鍵添加空值 –

+0

我仍然沒有將數據添加到表 – Guest012393

回答

0

我有同樣的錯誤,它感覺像我的錯誤。我所做的是爲外鍵創建不同的遷移。因此,首先創建帶有字段的表,然後(在接下來的日期遷移中)添加外鍵。

然後我回滾了所有的遷移,並用php artisan migrate複製它們。它爲我工作,我希望它也適用於你。

+0

所以你說我應該在添加外鍵之前添加日期到表中? – Guest012393

+0

不,只要確保使用外鍵遷移的文件名具有最新日期即可。 –

+0

如果我的回答很有幫助,請註冊並選擇它作爲最佳答案。 –

0

我預見你創建的相關表(「客戶」)指定的主鍵/ ID,因爲這

$table->bigInteger('id'); 

$table->integer('id'); 

將在這個意義上造成的問題,你的外鍵約束 被指定爲

$ table-> integer('client_id') - > unsigned();

whiles主鍵/ id不具有unsigned()約束分配給它。

因此改變相關表的主鍵

$table->bigInteger('id')->unsigned(); 

$table->integer('id')->unsigned(); 

如果您正在使用BIGINTEGER主鍵試試,使foerign鍵也BIGINTEGER。不要忘記使用unsigned()(主鍵和外鍵)。