将Doctrine SQL查询生成器(DBAL)映射到类型的惯用方式是什么?

问题描述 投票:0回答:1

我在使用MySQL 8通过Doctrine SQL查询生成器(从DBAL而非ORM)构建的查询的类型映射时,面临挑战。

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

  • user_id(表中的bigint列)
  • start_at(表中的datetime列)
  • 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(Immutable)对象。

当然,我可以通过遍历/映射从数据库中获取的结果来进行类型映射/自身广播,但是我想知道在Doctrine中是否还有另一种方法(也许通过为SQL注册som类的ResultSetMapping或类似方法)查询生成器)。如果确实可行,那么惯用的方法是什么?

谢谢。

php doctrine
1个回答
0
投票

您是否为要获取的对象映射了数据/列?在symfony项目中使用该理论时(我猜也是纯PHP项目,其解释为here时,您指向的是from()方法中的实体类,因此,例如,如果映射对象为Acme\Model\SomeObject,则需要传递该对象名称空间和名称为from()方法->from('Acme\Model\SomeObject', 'alias'),则它应该自动使用值填充对象(如果有设置方法或属性是公共的)]

© www.soinside.com 2019 - 2024. All rights reserved.