我在使用MySQL 8通过Doctrine SQL查询生成器(从DBAL而非ORM)构建的查询的类型映射时,面临挑战。
执行的查询从数据库返回以下三列:
但是根据我目前的实现(如下所示)(例如,简化),没有值被映射到它们的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(Immutable)对象。
当然,我可以通过遍历/映射从数据库中获取的结果来进行类型映射/自身广播,但是我想知道在Doctrine中是否还有另一种方法(也许通过为SQL注册som类的ResultSetMapping或类似方法)查询生成器)。如果确实可行,那么惯用的方法是什么?
谢谢。
您是否为要获取的对象映射了数据/列?在symfony项目中使用该理论时(我猜也是纯PHP项目,其解释为here时,您指向的是from()方法中的实体类,因此,例如,如果映射对象为Acme\Model\SomeObject
,则需要传递该对象名称空间和名称为from()方法->from('Acme\Model\SomeObject', 'alias')
,则它应该自动使用值填充对象(如果有设置方法或属性是公共的)]