如何用Doctrine Migrations生成TEXT类型的数据库列?
解决Doctrine ORM生成TEXT类型字段变为VARCHAR(500)的问题
针对你的Symfony6+PHP8.2环境,使用Doctrine ORM 2.20.1和Migrations 3.3.1时出现的字段类型错误,可按以下步骤修复:
1. 修正实体字段注解配置
Types::TEXT类型本身对应数据库的TEXT类字段(如MySQL的TEXT默认长度为65535),无需额外指定length参数,多余的length可能触发Doctrine的类型转换逻辑,导致生成VARCHAR。修改实体代码:
#[ORM\Column(type: Types::TEXT)] private string $registration;
如果需要更大长度的文本类型(如MEDIUMTEXT、LONGTEXT),可通过columnDefinition显式指定:
#[ORM\Column(type: Types::TEXT, columnDefinition: 'MEDIUMTEXT NOT NULL')] private string $registration;
2. 检查Doctrine DBAL类型映射配置
确保config/packages/doctrine.yaml中DBAL的类型映射正确,避免TEXT类型被错误转换:
doctrine: dbal: url: '%env(resolve:DATABASE_URL)%' # 确认类型映射配置 mapping_types: text: text types: text: class: Doctrine\DBAL\Types\TextType commented: false
3. 清除缓存并重新生成迁移
执行以下命令确保配置生效,重新生成正确的迁移文件:
bin/console cache:clear bin/console doctrine:migrations:diff
查看生成的迁移文件,确认registration字段已变为TEXT类型。
内容的提问来源于stack exchange,提问作者Calamity Jane
相关产品推荐
相关产品推荐

