2016-09-08 98 views
0

好日子,Laravel 5.2下降外鍵

我想砸在以前像這樣實施了Laravel 5.2遷移外鍵:

編輯:使用該表中的ID的創建(前它的外鍵)爲:

$table->integer('agent_rights_id')->unsigned()->nullable(); 

外鍵:

Schema::table('agents', function (Blueprint $table){ 
     $table->foreign('agent_rights_id')->references('id')->on('agent_rights'); 
    }); 

我的博士運算看起來是這樣的:

Schema::table('agents', function (Blueprint $table){ 
     $table->dropForeign('agents_agent_rights_id_foreign'); 
     $table->dropColumn('agent_rights_id'); 
    }); 

我發現,人們必須走「真正」的指標名稱,而不是標籤 - 這在我前面的代碼片斷已經想到的(爲this question參考)。

但是,這給我的錯誤:

[Illuminate\Database\QueryException]                                               
SQLSTATE[HY000]: General error: 1025 Error on rename of './{name}/agents' to './{name}/#sql2-2a6-1d8' (errno: 152) (SQL: alter table `agents` drop foreign key `agents_agent_rights_id_foreign`) 



[PDOException]                                 
SQLSTATE[HY000]: General error: 1025 Error on rename of './{name}/agents' to './{name}/#sql2-2a6-1d8' (errno: 152) 

研究這個帶來了沒有真正的解決方案,只能從MySQL錯誤訊息...

問:你這個傢伙什麼,或我的代碼段出了什麼問題?

+0

我做了什麼,在這個問題告訴我創造了這個職位之前。這不是同一個問題,因爲我已經在那裏做了什麼。 – Mentenyia

+0

你錯過了一些東西,因爲我在我的項目中運行的一樣,它工作正常。無論如何,我刪除重複並重新打開它。 我也再次檢查你的腳本。 請參閱Laravel文檔https://laravel.com/docs/5.2/migrations。 – Manish

+0

你也可以傳遞一個數組值,它會像'$ table-> dropForeign(['agent_rights_id']);' – Manish

回答

2

@entenyia這是在創建外鍵約束之前使用unsigned()的必要條件。請閱讀鏈接https://laravel3.veliovgroup.com/docs/database/schema#foreign-keys

注意:外鍵中引用的字段很可能是自動增量,因此會自動生成一個無符號整數。請使 確保使用unsigned()創建外鍵字段,因爲兩個字段 必須是完全相同的類型,兩個表上的引擎都必須將 設置爲InnoDB,並且必須在 表之前創建引用表與外鍵。

所以,你應該建立這樣的:

$table->integer('agent_rights_id')->unsigned(); // Always create column before creating Foreign key constraint otherwise this will also give error. 
$table->foreign('agent_rights_id')->references('id')->on('agent_rights'); 

當你將要刪除的外鍵會出現沒有問題/錯誤後。

對於滴速索引使用此方法表name_column-name_index型

$table->dropForeign('agents_agent_rights_id_foreign'); 
+0

我這樣做的時候仍然有錯誤,在unsigned()之後沒有使用nullable()時也是如此......但是我會再次從頭開始設置整個數據庫來測試它。我會回答然後:) – Mentenyia

+0

這是無效()後unsigned()哪個麻煩。感謝您的幫助 :) – Mentenyia