使用 SQLite 迁移 Laravel

Vla*_*tus 2 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');
       });

   }
Run Code Online (Sandbox Code Playgroud)

但抛出了以下错误:

General error: 1 Cannot add a NOT NULL column with default value NULL
Run Code Online (Sandbox Code Playgroud)

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

Jef*_*ert 5

引用Daniel Vassallo 的回答:

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

(答案使用的来源在这里

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

  1. 重命名表
  2. 使用更新的结构重新创建表(包括 FK 约束)
  3. 使用现有数据填充新表,为新字段提供值
  4. 扔掉你的旧桌子

您可以交换 #1 和 #2,以便创建表的临时版本,然后删除旧版本/在最后重命名新版本,但这取决于您。如果出现问题,走这条路线可能更安全,因为此时您的旧表不会处于重命名状态。