当前位置: 首页 > 知识库问答 >
问题:

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

哈沛
2023-03-14

我正面临着一个挑战,而工作类型映射的查询构建通过DoctrineSQL查询生成器(从DBAL,而不是ORM)使用MySQL 8。

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

  • 用户id(表中的bigint列)
  • 起始时间(表中的日期时间列)
  • 结束时间(表中的datetime列)

但是,通过我当前的实现(例如简化),没有值映射到它们的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()方法返回的结果返回一个数组

当然,我可以通过迭代/映射从数据库中获取的结果来进行类型映射/强制转换,但我想知道在原则中是否有其他方法来实现这一点(可能通过为SQL查询生成器注册som类型的ResultsMapping或类似的方法)。如果这确实是可能的,那么惯用的方法是什么?

谢谢。


共有1个答案

薛云瀚
2023-03-14

您是否映射了要获取的对象的数据/列?在symfony项目中使用原则时(我猜纯PHP项目也是如此,这里对此进行了解释),您指的是from()方法中的实体类,因此,例如,如果映射对象是Acme\Model\SomeObject,则需要将对象名称空间和名称传递给from()方法-

 类似资料:
  • 给定一组C++概念: 但是样板文件穿过屋顶:)

  • 不是Android系统的问题。 另见: 如何从Firebase android中获取所有子列表

  • 我想进行一个复杂的查询,并将结果映射到DTO中。DTO如下所示: 我的存储库接口是从 。这抛出了一个 ,因为 本身不是实体。 存储库是: 查询从其他实体获取数据以构建DTO。有没有办法将每个列映射到DTO?我试图用下面的查询映射它,但它仍然得到<code>而不是托管类。

  • 我尝试使用的将本机SQL查询映射到POJO类,如下所示: 然后,为了在创建本机查询时使用声明的结果集映射,我通过它的名称引用它: 但这对我不起作用,我得到以下错误:

  • 几个小时以来,我一直在努力让MapStruct为JAXB生成的类生成有效的映射器。这些类的特殊性在于,它们既没有集合的setter,也没有集合的adder。例如: 类avove有一个getter和一个属性设置器(本例中为firstName),但对于集合(此处列出),它只有一个getter。因此,消费者有责任通过getAddressTypes(add(new AddressType(...))进行访

  • 例如,我有以下接口映射器: 在代码中,您可以看到映射和一些默认方法,其中包含其他映射。如何在Mapstruct映射中使用这些方法,以便Mapstruct使用这些方法在字段中填充值?