【问题标题】:Laravel migration with SQLite使用 SQLite 进行 Laravel 迁移
【发布时间】:2016-12-06 18:48:21
【问题描述】:

我在 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 行。如何解决?

【问题讨论】:

  • SQLite 中列的默认值为 null。所以我会更担心nullable() 不起作用。
  • 浪费了一堆时间至今没有解决办法
  • 声明 nullable 时的错误是什么?

标签: php mysql sqlite laravel-5


【解决方案1】:

引用 Daniel Vassallo 的 this answer

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

(答案使用的来源是here

所以试图通过添加外键约束来改变你的表是行不通的。您需要:

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

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

【讨论】:

    猜你喜欢
    • 2018-08-21
    • 2023-01-22
    • 1970-01-01
    • 2021-08-16
    • 2016-05-06
    • 2018-02-04
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    相关资源
    最近更新 更多