在 Laravel 6 的数据库迁移中,修改字段的类型
1、现在表 theme_asset 的字段 theme_id,其类型为 varchar(255)。之前的迁移代码如下 。如图1
1 | $table ->string( 'theme_id' )->nullable(false)->comment( '主题Id' ); |
2、现在计划新增加一个迁移文件,以修改字段 theme_id 的类型为:uuid,即 char(36)。
1 | $table ->uuid( 'theme_id' )->change(); |
3、报错:Doctrine\DBAL\Exception : Unknown column type “uuid” requested. 如图2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | PS E:\wwwroot\object> php artisan module:migrate ThemeStoreDB Migrating: 2022_05_20_160818_update_theme_asset_table Doctrine\DBAL\Exception : Unknown column type "uuid" requested. Any Doctrine type that you use has to be registered with \Doctrine\DBAL\Types\Type::addType(). You can get a list of all the known types with \Doctrine\DBAL\Types\Type::getTypesMap(). If this error occurs during database introspection then you might have forgotten to register all database types for a Doctrine Type. Use AbstractPlatform #registerDoctrineTypeMapping() or have your custom types implement Type#getMappedDatabaseTypes(). If the type name is empty you might have a problem with the cache or forgot some mapping information. at E:\wwwroot\object\vendor\doctrine\dbal\lib\Doctrine\DBAL\DBALException.php:282 278| * @return Exception 279| */ 280| public static function unknownColumnType( $name ) 281| { > 282| return new Exception( 'Unknown column type "' . $name . '" requested. Any Doctrine type that you use has ' . 283| 'to be registered with \Doctrine\DBAL\Types\Type::addType(). You can get a list of all the ' . 284| 'known types with \Doctrine\DBAL\Types\Type::getTypesMap(). If this error occurs during database ' . 285| 'introspection then you might have forgotten to register all database types for a Doctrine Type. Use ' . 286| 'AbstractPlatform#registerDoctrineTypeMapping() or have your custom types implement ' . Exception trace: 1 Doctrine\DBAL\DBALException::unknownColumnType( "uuid" ) E:\wwwroot\object\vendor\doctrine\dbal\lib\Doctrine\DBAL\Types\TypeRegistry.php:37 2 Doctrine\DBAL\Types\TypeRegistry::get( "uuid" ) E:\wwwroot\object\vendor\doctrine\dbal\lib\Doctrine\DBAL\Types\Type.php:237 Please use the argument -v to see more details. |
4、调整为 char 后,仍然报错:Unknown column type “char” requested.
1 | $table ->char( 'theme_id' , 36)->change(); |
5、最终决定使用 DB::statement,代码如下
1 | DB::statement( 'ALTER TABLE ' . DB::connection()->getTablePrefix() . 'theme_asset MODIFY theme_id char(36) NOT NULL COMMENT \'文件内容\'' ); |
6、查看 生成表的 SQL 对比,符合预期。如图3
1 2 3 | `theme_id` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主题Id', `theme_id` char(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主题Id', |
近期评论