2016-08-01 90 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

是的,感谢投票了 –