使用SQLite进行Laravel迁移

时间:2016-08-01 15:48:27

标签: php mysql sqlite laravel-5

我在Postgres和SQLite中进行了迁移,我遇到了SQLite数据库的问题。相同的迁移适用于2个不同的数据库。 Postgres迁移是可以的,但不是SQlite。我添加了迁移以更改表并添加新字段。

   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

当我尝试添加nullable()时,我没有创建字段,当我添加默认值0或1时,我遇到了约束错误,因为在相关表中我有第1行和第2行。如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

Daniel Vassallo从this answer引述:

  

SQLite不支持ALTER TABLE命令的ADD CONSTRAINT变体

(答案使用的来源是here

因此,尝试通过添加外键约束来更改表是不可行的。你需要:

  1. 重命名表格
  2. 使用更新的结构(包括您的FK约束)重新创建表
  3. 使用现有数据填充新表格,为新字段提供值
  4. 放下旧桌子
  5. 您可以交换#1和#2,以便创建表的临时版本,然后删除旧版本/在最后重命名新版本,但这取决于您。如果出现问题,可能会更安全地走这条路线,因为此时你不会让旧表处于重命名状态。