我有以下迁移方案:
Schema::create('items', function(Blueprint $table) {
$table->uuid('id')->primary();
// more columns ...
});
现在,我们想要添加一个额外的自增列:
Schema::table('items', function(Blueprint $table) {
$table->dropPrimary('id');
$table->rename('id', 'SystemId')->change();
$table->id();
});
问题: SQLite不允许更改主键
解决方案: 建议删除表并使用更改后的模式重新创建
当然,理论上这样做可行,但复制第一次迁移的代码到第二次迁移中与DRY原则背道而驰。所以我的问题是:有没有其他方法可以实现这个目的?
migrations
表并从中删除迁移,以便 Laravel 知道它没有被迁移。然后运行php artisan migrate
并在 SQL 文件中将id
替换为SystemId
后导入数据。在您的模型中声明新的主键protected $primaryKey = 'SystemId';
,我想您就完成了。 - LaralexTableDiff
,因此它可以部分自动化。但是我觉得我仍然需要自己编写其余部分,或者我错过了任何一种已经自动化删除旧表并创建新表的方法吗? - shaedrich