Doctrine 2.5查询日志记录:请求的未知列类型"2"

5 浏览
0 Comments

Doctrine 2.5查询日志记录:请求的未知列类型"2"

抱歉问题比较长。我有一个基于ZF3和Doctrine的应用程序。我想将发送给MySQL服务器的“最终”查询记录到应用程序日志中。为此,我已经根据这个特定答案实现了一个解决方案。注意:我知道ZF Debug Bar,但是如果需要,我需要将查询记录到应用程序日志中进行生产调试。然而,在某些情况下,记录器会出现致命错误:未知列类型“2”请求。您使用的任何Doctrine类型都必须在\Doctrine\DBAL\Types\Type::addType()中注册。您可以使用\Doctrine\DBAL\Types\Type::getTypesMap()获取所有已知类型的列表。如果此错误在数据库内省期间发生,则可能忘记为Doctrine类型注册所有数据库类型。使用AbstractPlatform#registerDoctrineTypeMapping()或让您的自定义类型实现Type#getMappedDatabaseTypes()。如果类型名称为空,则可能存在缓存问题或遗漏了一些映射信息。奇怪的是,错误只出现在记录器中-如果我禁用记录器,则查询执行得很好。我的实现如下(我使用UUID作为主键):......我进行了一些调查,发现使用QueryBuilder构建的特定查询在通过记录器运行时失败:......我已经缩小到了传递给DoctrineLog类的startQuery方法的$types参数。当使用findBy存储库方法正确记录查询时,$types数组如下:......当使用QueryBuilder创建查询时无法记录(查询失败时),$types数组如下:......我完全不知道这个“2”应该表示什么。就像我说的,奇怪的是,无论如何创建查询,查询都能成功执行。虽然对于这个特定的查询我可以转储QueryBuilder,但是当运行更新查询时也会出现此故障,因此我需要找到原因或找到另一种记录整个查询的方法。任何指针都将不胜感激。注意:types列表,由\Doctrine\DBAL\Types\Type::getTypesMap()返回,如下:......

0
0 Comments

在Doctrine 2.5版本中,出现了一个名为"Doctrine 2.5 query logging: Unknown column type "2" requested"的问题。这个问题的原因是在一个实体类中,我在ClassMetadataBuilder->addField( 'trace', ParameterType::STRING );中传入的类型是"2"(即ParameterType::STRING)。需要确保使用的类型来自于\Doctrine\DBAL\Types\Types(如Types::uuid),或者至少按照错误提示中的内容自己定义一个类型。

这个错误只出现在日志记录器中,在使用查询构建器(query builder)构建查询时(参见示例)。无论查询是如何构建的,查询本身都能成功执行。如问题所述,uuid类型已经正确定义。

解决这个问题的方法是使用来自\Doctrine\DBAL\Types\Types的类型,或者按照错误提示中的内容自己定义一个类型。

0