使用SQLite与Doctrine时出现getCreateSequenceSQL不支持的平台错误
我在修改版的API Platform Symfony环境中,因Docker无法正常运行,改用SQLite作为数据库。在.env文件中取消注释DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"后,执行bin/console doctrine:database:create成功创建数据库,但运行bin/console doctrine:schema:create时出现以下错误:
In Exception.php line 20: Operation 'Doctrine\DBAL\Platforms\AbstractPlatform::getCreateSequenceSQL' is not supported by platform.
我已尝试删除所有迁移文件并生成覆盖实体变更的新迁移,但问题仍未解决,请问可能的原因是什么?
可能的原因及解决方法
实体使用了SQLite不支持的序列自增策略
SQLite本身不支持数据库序列(Sequence),如果你的实体中显式指定了SEQUENCE类型的自增生成策略(比如@GeneratedValue(strategy="SEQUENCE")),就会触发该错误。
解决:将实体的自增策略改为SQLite兼容的AUTO或IDENTITY,示例代码:/** * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") * @ORM\Column(type="integer") */ private $id;Doctrine配置残留了非SQLite平台设置
检查config/packages/doctrine.yaml,确认是否手动指定了支持序列的数据库平台(比如PostgreSQL或MySQL的旧配置),确保配置适配SQLite:doctrine: dbal: driver: 'pdo_sqlite' url: '%env(resolve:DATABASE_URL)%' # 移除或注释掉类似以下的错误平台配置 # platform: doctrine.dbal.postgresql_platform第三方扩展引入了依赖序列的逻辑
部分API Platform扩展或第三方Bundle可能默认依赖序列策略,即使自身实体配置正确,也会触发序列相关操作。可以暂时禁用非必要扩展,排查是否由第三方代码导致。Doctrine元数据缓存未清除
修改配置或实体后,旧的序列相关元数据可能仍存于缓存中。执行以下命令清除缓存:bin/console cache:clear --env=dev bin/console doctrine:cache:clear-metadata
内容的提问来源于stack exchange,提问作者Mayor of the Plattenbaus

