将 Doctrine SQL Query Builder (DBAL) 映射到类型的惯用方法是什么?



在使用MySQL 8通过Doctrine SQL Query Builder(来自DBAL,而不是ORM(构建的查询进行类型映射时,我面临着一个挑战。

执行的查询从数据库中返回以下三列:

  • user_id(表中的 bigint 列(
  • start_at(表中的日期时间列(
  • ends_at(表中的日期时间列(

但是通过我当前的实现,如下所示(例如简化(,没有值映射到它们的 PHP 对应项。

$queryBuilder = $this->entityManager->getConnection()->createQueryBuilder();
$result = $queryBuilder
->select([
'st.user_id',
'st.starts_at',
'st.ends_at',
])
->from('some_table', 'st')
->execute()
->fetchAll();

fetchAll(( 方法返回的结果给了我一个array<string, string>,有效地为我留下了 user_id 的字符串值而不是 int 和 start_at/ends_at 的字符串,而不是本机 PHP DateTime(不可变(对象。

当然,我可以通过迭代/映射从数据库获取的结果来自己进行类型映射/强制转换,但我想知道是否有另一种方法可以在 Doctrine 中做到这一点(也许通过注册 som 类型的 ResultSetMapping 或类似的 SQL 查询生成器(。 如果这确实是可能的,那么惯用的方式是什么?

谢谢。

您是否为要获取的对象映射了数据/列?在symfony项目中使用原则时(我想也是纯PHP项目,并且在这里进行了解释,您指向from((方法中的实体类,因此例如,如果您的映射对象AcmeModelSomeObject则需要将对象命名空间和名称传递给from((方法->from('AcmeModelSomeObject', 'alias')然后它应该自动用值填充对象(如果有setters或属性是公共的(

相关内容

最新更新