首页 > 解决方案 > Laravel 数据库:如何“更改” UUID 列类型

问题描述

我有一个 UUID 列类型,它是另一个表的外键,我想让它可以为空。

$table->uuid('event_id')->nullable()->change();

Laravel 文档包括一个可以“更改”的列类型列表,这不包括 uuid,所以这并不奇怪,https: //laravel.com/docs/5.6/migrations#modifying-columns

数据库是 MySQL,创建时 event_id 字段是一个字符,所以我尝试了以下操作:

$table->char('event_id',36)->nullable()->change();

得到与上面相同的结果(同样,没有真正的惊喜)。

我的问题是:我可以使用 Laravel 的 DB Schema 进行此修改,还是需要使用原始 SQL?

标签: laravel

解决方案


与枚举列一样,如果您希望更改现有数据库上的 uuid,您可能必须使用原始 SQL。

我通常会在新的迁移中写这样的东西来处理现有的数据库:

if (config('app.env')) === 'production') {
    DB::statement('ALTER ...');
}

然后我会回到原来的迁移并将 uuid 更改为 char。这样,您不必担心原始 SQL 无法在您的测试或本地环境中运行(在运行 sqlite 的情况下)。


推荐阅读