我正在使用 Laravel 中的迁移,并且我有一个合作伙伴表,该表的类型属性为枚举类型,具有以下值:
$table->enum('type', ['cliente', 'proveedor', 'empleado', 'transportadora'])->nullable();
我需要的是:创建另一个迁移,以便我可以修改合作伙伴表,向枚举添加一个值,使数据库看起来像这样:
['cliente', 'proveedor', 'empleado', 'transportadora', 'nuevo_dato']
到目前为止,我尝试的是以下内容:
Schema::table('partners', function ($table) {
DB::statement("ALTER COLUMN 'type' ADD VALUE 'nuevo_dato' AFTER 'cliente'");
});
我也试过:
Schema::table('partners', function ($table) {
$table->enum('type', ['cliente', 'proveedor', 'empleado', 'transportadora', 'nuevo_dato'])->change();
});
你...
DB::statement("ALTER TABLE 'partners' MODIFY COLUMN 'type' enum('nuevo_dato') NOT NULL AFTER `transportadora`");
没有达到预期的结果。如果您能帮我解决这个问题,我将不胜感激。(PS:我使用的是 PostgreSQL)
在文档中,它解释了如何使用
doctrine/dbal
( Modify Columns ) 进行修改,但澄清它不支持类型的列enum
。我特别尝试避免枚举类型列并处理来自应用程序的选项,但我可以想出一种方法来解决您的问题,即使是几个步骤也应该可以解决您的问题。
1、备份数据库。
在迁移中
事实是,我从来没有做过这样的事情,但它应该可以工作。我等待您的评论,并记得在做任何事情之前备份数据库,特别是如果您正在生产中。我建议您在本地环境中克隆基础并运行迁移并在生产中运行迁移之前验证它是否有效。
问题
enum
是他们在我们的表上创建了一个约束,限制我们只使用之前定义的案例。所以我们需要做的第一件事就是移除约束:
我们定义要包含在
enum
我们将重新创建约束