我使用的是Laravel 5.1,我有一个名为packages的表,其结构如下:
id int(11)
weight decimal(10,2)
weight_unit enum('Kg.', 'Gm.')
我想将weight_unit
枚举更改为:weight_unit enum('Grams','Kgs.','Pounds')
为此,我创建了以下迁移:
public function up()
{
Schema::table('packages', function ($table) {
$table->enum('weight_unit', array('Grams','Kgs.','Pounds'))->nullable()->change();
});
}
但是当我运行迁移时,我收到一个错误:
Unknown database type enum requested, Doctrine\DBAL\Platforms\MySqlPlatform
may not support it.
如何更改此枚举?
9条答案
按热度按时间tkclm6bt1#
使用
DB::statement
方法:l3zydbqr2#
当向修改后的枚举列添加新的枚举值时,这对我很有效。
将以下内容添加到
up()
方法中:然后在
down()
方法中,您可以还原所做的更改:注意:在删除枚举值之前,需要将其更改为另一个将保留的枚举值。
zdwk9cvp3#
rjee0c154#
您可以在迁移中添加自定义构造函数,并向Doctrine解释
enum
应该像字符串一样处理。kyxcudwk5#
如果您不想丢失数据并使用新值更新它,我提出了此解决方案:
这样,您就可以用新值替换旧值。
ltqd579y6#
在change()调用之前添加以下内容:
pxyaymoc7#
我认为这是固定的Laravel 10增加了支持原生列修改。
https://github.com/laravel/framework/pull/45487
因此,从Laravel 10您可以这样做:
我在新的Laravel 9.55.0和10.0.2应用程序上尝试了相同的迁移:
laravel-9.52.0.jpg
laravel-10.0.2.jpg
zbdgwd5y8#
我能够通过删除和添加约束来解决这个问题。这确保了我现有的数据也是完整的。
5anewei69#
使用默认值。将此添加到
up()
中: