在使用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或属性是公共的(