2014-11-01 72 views
4

我試圖創建一個Laravel遷移表,但我遇到了一些麻煩。 我只需要創建一個帶有主對('id'和'revision')的表,'id'是一個自動增量。 我可以在MySQL中做到這一點,但我無法用Laravel Migrations來設置它,因爲增量()也會將該字段設置爲主要字段。 到目前爲止,我有這樣的:Laravel遷移:當它不是主要時自動遞增密鑰

Schema::create('bibliographies', function(Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->integer('revision'); 
     ... 
     $table->timestamps(); 
     $table->softDeletes(); 
     $table->primary(array('id', 'revision')); 
    }); 

注:改變增量()方法是不是一種選擇,因爲它是Laravel核心。

非常感謝您的幫助。

回答

5

drop the primary key你之前重新添加它:

$table->dropPrimary('id'); 
$table->primary(array('id', 'revision')); 
+0

我已經嘗試過,但沒有成功。它返回我這個錯誤: [Illuminate \ Database \ QueryException] SQLSTATE [42000]:語法錯誤或訪問衝突:1075不正確的表定義;可以只有一個自動 列,它必須被定義爲一個鍵(SQL:alter table'bibliographies' drop primary key) 此外,該表僅使用'id'作爲主鍵,我需要手動刪除它。 – CarlosMaia 2014-11-01 21:32:25

+2

@CarlosMaia假設你實際上並不需要一對列作爲** primary **,你可以使它們[唯一](http://laravel.com/api/4.1/Illuminate/Database/Schema/Blueprint。 html#method_unique)沒有任何問題 - 會工作嗎? – Joe 2014-11-02 09:41:15

+0

是的,它的工作原理。謝謝你,小夥伴! – CarlosMaia 2014-11-02 22:18:00

0
$table->unsignedInteger('id')->change();//will remove the auto increment 
$table->dropPrimary('id');//will remove primary constrain 
$table->unsignedInteger('revision') //add revision column 
$table->primary(array('id', 'revision'));//make them both primary 
$table->increments('id')->change()//add the auto increment constrain back