我在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行。如何解决这个问题?
答案 0 :(得分:2)
Daniel Vassallo从this answer引述:
SQLite不支持ALTER TABLE命令的ADD CONSTRAINT变体
(答案使用的来源是here)
因此,尝试通过添加外键约束来更改表是不可行的。你需要:
您可以交换#1和#2,以便创建表的临时版本,然后删除旧版本/在最后重命名新版本,但这取决于您。如果出现问题,可能会更安全地走这条路线,因为此时你不会让旧表处于重命名状态。