Doctrine2:使用 NativeQuery 和 ResultSetMapping 进行查询

Posted

技术标签:

【中文标题】Doctrine2:使用 NativeQuery 和 ResultSetMapping 进行查询【英文标题】:Doctrine2: query using NativeQuery and ResultSetMapping 【发布时间】:2015-03-28 00:25:50 【问题描述】:

我在自定义存储库 symfony 2 类中有这段代码,我很难理解为什么 $results 总是为空。MyApplicationBundle:Archive 是映射到 DB 的实体类集合是连接表 (ManyToMany) 不是实体当前不是此类的属性,但我在结果中需要它$where_str 是在上面构建的我做错了什么?谢谢

    $rsm = new ResultSetMapping();
    $rsm->addEntityResult('MyApplicationBundle:Archive', 'a');
    $rsm->addFieldResult('a', 'id', 'id');
    $rsm->addFieldResult('a', 'author', 'author');
    $rsm->addFieldResult('a', 'title', 'title');
    $rsm->addFieldResult('a', 'present', 'present');

    $sql = "select
              a.id,
              a.author,
              a.title,
              IF((select c.archive_id from collection c where c.archive_id = a.id and c.user_id = :user),1,0) as present
            from
              archive a
            where
              $where_str";

    $em = $this->getEntityManager();

    $query = $em->createNativeQuery($sql, $rsm);
    $query->setParameters($arrParameters);

    $results = $query->getResult();

    return $results;

如果更好的话,非常乐意尝试使用 DQL 或 DQB。

【问题讨论】:

【参考方案1】:

经过一番尝试,我发现上面的代码是正确的。我只需要在存档实体中添加字段“present”,创建 getter 和 setter(doctrine:generate:entities)并更新数据库以在表中创建字段(doctrine:schema:update --force)。不管你是否打算在其他地方使用它。

【讨论】:

以上是关于Doctrine2:使用 NativeQuery 和 ResultSetMapping 进行查询的主要内容,如果未能解决你的问题,请参考以下文章

使用 NativeQuery 的 MongoDB 聚合

如何在spring数据仓库nativeQuery中使用oracle NVL函数

带有 OpenQuery 和参数的 NativeQuery

使用 Doctrine NativeQuery 获取单行结果

使用Doctrine NativeQuery获取单行结果

我可以在 JpaRepository nativeQuery 中使用枚举参数吗?