原则 2 原生 PHP 8.1 枚举支持 - 将枚举与查询生成器一起使用不起作用



条令增加了对PHP8.1枚举类型的本地支持。它看起来像预期的那样在实体端工作(将实体保存在DB上并水合,而获取实体则按预期工作(。但是,当我尝试使用枚举字段上带有where子句的存储库查询生成器来获取实体时,由于强制转换问题,它引发了异常。

例如

$em->getRepository(SomeEntity::class)
->createQueryBuilder('s')
->where('s.enumStatus = :status')
->setParameter('status', EnumStatus::Pending)
->getQuery()
->getResult();

将导致

Object of class EnumStatus could not be converted to string
in vendor/doctrine/dbal/src/Driver/PDO/Statement.php (line 50)

当然,我可以通过做->setParameter('status', EnumStatus::Pending->value)来省略这个问题,但这有点奇怪。

是我做错了什么,还是只是想这样?

此功能尚未在正式发布中提供。有一个合并的PR将把它添加到ORMv.1.12.1中。

https://github.com/doctrine/orm/pull/9453/commits/9ebd07a36645236f01624754f7c71e0ff84c30b1#

https://github.com/doctrine/orm/issues/9372

最新更新