没有不值得去解决的问题,也没有不值得去学习的技术!

在 Laravel 6 的数据库迁移中,修改字段的类型

报错:Doctrine\DBAL\Exception : Unknown column type "uuid" requested.
1、现在表 theme_asset 的字段 theme_id,其类型为 varchar(255)。之前的迁移代码如下 。如图1
现在表 theme_asset 的字段 theme_id,其类型为 varchar(255)。之前的迁移代码如下
图1


$table->string('theme_id')->nullable(false)->comment('主题Id');


2、现在计划新增加一个迁移文件,以修改字段 theme_id 的类型为:uuid,即 char(36)。


$table->uuid('theme_id')->change();


3、报错:Doctrine\DBAL\Exception : Unknown column type “uuid” requested. 如图2
报错:Doctrine\DBAL\Exception  : Unknown column type "uuid" requested.
图2


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.


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


5、最终决定使用 DB::statement,代码如下


DB::statement('ALTER TABLE ' . DB::connection()->getTablePrefix() . 'theme_asset MODIFY theme_id char(36) NOT NULL COMMENT \'文件内容\'');


6、查看 生成表的 SQL 对比,符合预期。如图3
查看 生成表的 SQL 对比,符合预期
图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',


PHP / Laravel / Yii2 老项目维护与长期技术支持

如果你的 PHP / Laravel / Yii2 项目已经上线,但遇到原开发离职、Bug 长期无人修复、接口不稳定、性能下降、代码难以接手等问题,可以联系我做一次远程技术排查。

适合以下情况:
✅ 老旧 PHP 系统无人维护
✅ Laravel / Yii2 项目 Bug 修复
✅ 后台管理系统小功能迭代
✅ RESTful API 接口排查
✅ MySQL / Redis / Nginx 性能问题
✅ 长期远程兼职维护

可先从一次小问题开始:
✅ 线上报错排查
✅ 接口异常分析
✅ 慢查询与性能瓶颈定位
✅ 代码结构初步评估
✅ 部署环境与日志检查

如需咨询,请联系我,并注明:PHP 维护咨询

联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理