2017-07-04 117 views
1

我的表「sales_order_details」具有id字段具有缺省值0整數「INT(10)」。我需要將其更改爲遷移中的主要自動增量密鑰。Laravel遷移 - 如何改變`id`字段是伯和自動遞增後

我試圖以下列方式:

public function up() 
    { 
     Schema::table('sales_order_details', function (Blueprint $table){ 

     $table->integer('id')->default(NULL)->change(); 
     $table->increments('id')->change(); 

     }); 
    } 

    public function down() 
    { 
     Schema::table('sales_order_details', function (Blueprint $table){ 
     $table->dropPrimary('id')->change(); 

     }); 
    } 

我收到以下錯誤:

[照亮\數據庫\ QueryException] SQLSTATE [42000]:語法錯誤或訪問衝突:1075不正確的表def inition;只能有一個自動柱,它必須被定義爲一個鍵 (SQL:ALTER TABLE sales_order_details改變ID的ID INT UNSIGNED AUTO_INCREM ENT NOT NULL)

[學說\ DBAL \驅動\ PDOException] SQLSTATE [42000 ]:語法錯誤或訪問衝突:1075錯誤的表def inition;只能有一個自動列,並且必須將其定義爲鍵

[PDOException] SQLSTATE [42000]:語法錯誤或訪問衝突:1075錯誤的表def inition;只能有一個自動列,並且必須將其定義爲密鑰

如何正確進行遷移?我使用的5.4版本

+0

爲什麼你都寫這些行$ table-> integer('id') - > default(NULL) - > change(); $表 - >增量( '身份證') - >更改(); 只有第二個增量需要。 –

+0

如果一起使用,「默認」和「增量」是否會產生問題? –

回答

3

你可以嘗試這樣的

public function up() 
    { 
     DB::statement("ALTER TABLE sales_order_details MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT");    
    } 

    public function down() 
    { 
     DB::statement("ALTER TABLE sales_order_details MODIFY id INT NOT NULL"); 
     DB::statement("ALTER TABLE sales_order_details DROP PRIMARY KEY"); 
     DB::statement("ALTER TABLE sales_order_details MODIFY id INT NULL"); 
    } 

這是可以實現你的目標的方式之一,我希望這有助於您

+0

你是如何從'id'中刪除默認值的? –

+0

如果主鍵在那裏,那麼你不能給出空值,所以我有第一個主鍵,然後將列設置爲可爲空,並且在可爲空的字段中,我們不需要給出默認的空值 –

+0

我正在討論'up '方法。你沒有刪除那裏的默認值。 –