【问题标题】:Why does Doctrine's "NativeQuery" return empty result set?为什么 Doctrine 的“NativeQuery”返回空结果集?
【发布时间】:2021-02-13 06:58:50
【问题描述】:

如果我使用 Doctrine 的 NativeQuery 执行一些奇异的 PostgreSQL 查询,我会得到空的结果集。例如,假设以下代码来自实体的存储库类

// src/Repository/FooRepository.php

class FooRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Foo::class);
    }

    /**
     * @return Foo[] Returns an array of Foo objects
     */
    public function findBySomething(string $something)
    {
        $rsm = new ResultSetMapping();

        $nq = $this->getEntityManager()->createNativeQuery(
            'SELECT * FROM foo WHERE column ->> \'key\' = :param',
            $rsm
        );
        $nq->setParameter(':param', $something);

        return $nq->getResult();
    }
}

现在,当我从控制器调用此方法时,我得到[]。为什么?

【问题讨论】:

    标签: symfony doctrine


    【解决方案1】:

    因为你已经告诉 Doctrine 返回空结果。如何?你已经实例化了ResultSetMapping,但没有配置它。如果要将结果作为Foo 对象的数组,则需要配置此结果集。在$rsm 实例之后添加以下行:

    $rsm = new ResultSetMapping();
    $rsm->addEntityResult(Foo::class, 'f');
    $rsm->addFieldResult('f', 'id', 'id');
    

    就是这样。现在您将真正获得Foo 对象的数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多