Doctrine orm 如何在本机查询列上使用Doctrine2类型转换

Doctrine orm 如何在本机查询列上使用Doctrine2类型转换,doctrine-orm,type-conversion,native-sql,Doctrine Orm,Type Conversion,Native Sql,在这上面找不到任何东西-看起来应该是直截了当的 Doctrine2文档给出的绑定参数类型转换示例如下所示: $date=new\DateTime2011-03-05 14:00:21; $stmt=$conn->prepareSELECT*从发布日期>的文章中选择?; $stmt->bindValue1,$date,datetime; $stmt->execute; 我想做的是为其中一列指定类型转换,但在文档或StackOverflow中找不到任何内容。这可能是一个伪示例: $stmt=$con

在这上面找不到任何东西-看起来应该是直截了当的

Doctrine2文档给出的绑定参数类型转换示例如下所示:

$date=new\DateTime2011-03-05 14:00:21; $stmt=$conn->prepareSELECT*从发布日期>的文章中选择?; $stmt->bindValue1,$date,datetime; $stmt->execute; 我想做的是为其中一列指定类型转换,但在文档或StackOverflow中找不到任何内容。这可能是一个伪示例:

$stmt=$conn->PrepareSelectDateTime从id=1的文章中选择; $stmt->setType0,日期类型;//0是列位置,日期类型是要转换为的PHP类型
如果有人知道如何做到这一点,这是SQL而不是DQL,我将不胜感激。谢谢。

这不是DBAL级别的工作。如果您在ORM中使用NativeSQL查询,您可以通过使用Hyde_数组模式并将一些获取的字段映射到实体来获得这种转换。如果不打算使用ORM,最快的解决方案是通过访问doctor\DBAL\Types\type::getType$someType->convertToPhpValue$fetchedValue对结果进行迭代并手动应用类型转换。能够在Doctrine\ORM\Query\resultstMappingAddScalarResult中指定第三个参数来说明获取的类型,这可能是对ORM的一个有价值的补充。

感谢您的澄清。我讨厌结果映射功能。我发现它毫无用处,而且傲慢到使用ORM的地步。我主要使用ORM特性进行插入/更新操作。我相信对于简单的数据检索,你应该尽量保持简单。事实上,你需要中间的一个水合物,水合物需要一个配置,在这种情况下,结果集映射。这也适用于TableGateway和ActiveQuery或任何您想使用的东西:在我的例子中,我不想/不需要水合步骤,因为我所要做的只是获取一组可以正确进行类型转换的标量值。我的希望是能够手动指定类型转换,并完全绕过ORM来简单检索标量值。就RSM功能而言,我意识到如果您想将自定义查询转换为对象图结果,这是必要的,但我仍然讨厌它。convertToPhpValue需要2个参数,第二个是平台。您可以从$connection->getdatabaseplatform获得它。请问您是如何解决这个问题的?我将Silex与普通DBAL适配器一起使用,所有获取的列都作为字符串返回。您是否找到了比手动迭代+转换更简单的解决方案?