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

Pet*_*ias 4 type-conversion native-sql doctrine-orm

无法找到任何相关内容 - 看起来它应该是直截了当的.

因此,Doctrine2文档为绑定参数提供类型转换的示例如下所示:

$date = new \DateTime("2011-03-05 14:00:21");
$stmt = $conn->prepare("SELECT * FROM articles WHERE publish_date > ?");
$stmt->bindValue(1, $date, "datetime");
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

我想要做的是为其中一列指定类型转换,但是我找不到文档或StackOverflow中的任何内容.这可能是一个伪示例:

$stmt = $conn -> prepare("SELECT datetime FROM articles WHERE id = 1");
$stmt -> setType(0, "date_type"); // 0 being the column position, "date_type" being the PHP type to convert to
Run Code Online (Sandbox Code Playgroud)

如果有人知道如何做到这一点(这是SQL而不是DQL),我将不胜感激.谢谢.

Ocr*_*ius 5

这不是在DBAL级别工作的东西.如果您在ORM中使用NativeSQL查询,则可以通过使用模式并将一些获取的字段映射到实体来通过水合(参见Doctrine ORM文档中NativeSQL部分)进行这种转换HYDRATE_ARRAY.最快的解决方案(如果您不打算使用ORM)是迭代结果并通过访问手动应用类型转换Doctrine\DBAL\Types\Type::getType($someType)->convertToPhpValue($fetchedValue).为了能够指定第三个参数来说明获取的类型,ORM可能是一个有价值的补充Doctrine\ORM\Query\ResultSetMapping#addScalarResult.

  • 就我而言,我不想/不需要水合步骤,因为我想做的就是获取一堆可以正确进行类型转换的标量值。我希望能够手动指定类型转换并完全绕过 ORM 以简单地检索标量值。就 RSM 功能而言,我意识到如果您想将自定义查询转换为对象图结果,这是必要的,但我仍然讨厌它。 (2认同)