为什么 Doctrine 的 "NativeQuery" return 为空结果集?

Why does Doctrine's "NativeQuery" return empty result set?

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

的存储库 class
// 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();
    }
}

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

因为你告诉 Doctrine return 清空结果。如何?您已实例化 ResultSetMapping,但未对其进行配置。如果你想要结果作为 Foo 对象的数组,你需要配置这个结果集。在 $rsm 实例之后添加以下行:

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

就是这样。现在你真的会得到一个 Foo 对象的数组。