5

在这方面找不到任何东西——似乎它应该是直截了当的。

因此,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();

我想要做的是为其中一列指定类型转换,但在文档或 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

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

4

1 回答 1

7

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

于 2012-07-15T18:16:10.637 回答