2016-08-01 92 views
1

我在Postgres和SQLite中進行了遷移,並且面臨着SQLite數據庫的問題。相同的遷移適用於2個不同的數據庫。 Postgres遷移是好的,但不是SQlite。我添加了用於更改表格和添加新字段的遷移。使用SQLite進行Laravel遷移

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

      $table->integer('currency_id')->unsigned(); 
      $table 
       ->foreign('currency_id') 
       ->references('id') 
       ->on('currency') 
       ->onUpdate('cascade') 
       ->onDelete('cascade') 
      ; 

      $table->dropColumn('currency'); 
     }); 

    } 

但被拋出以下錯誤:

General error: 1 Cannot add a NOT NULL column with default value NULL 

當我嘗試添加可空()字段沒有創建,當我添加默認值0或1我是因爲得到了相關約束錯誤表我有第1和第2行。這怎麼解決?

+0

SQLite中列的默認值爲null。所以我會更關心'可空'()'不工作。 – Devon

+0

廢棄一堆時間到目前爲止沒有解決方案 –

+0

聲明爲空時是什麼錯誤? – Devon

回答

1

由Daniel瓦薩洛從this answer引用:

SQLite不支持的ALTER TABLE命令的添加約束變體

(源即回答用途是here

所以試圖通過添加一個外鍵約束來改變你的表是不行的。你將需要:

  1. 重命名錶
  2. 重新創建表的更新結構(包括您的FK約束)
  3. 填充新表與現有的數據,新的領域提供價值
  4. 放下你舊錶

您可以交換#1和#2,以便創建臨時版本的表格,然後刪除舊錶格,然後在最後重命名新表格,但這取決於您。如果出現問題,那麼去那條路線可能會更安全,因爲在那時您不會讓舊錶格處於重命名狀態。

+0

tnx投給我的問題 –

+0

@VladimirStus這是一個很好的問題,謝謝你。 –

+0

是的,感謝投票了 –