我正在尝试使用doctrine2执行查询并需要它返回一个集合对象。
简化片段:
$players = $this->getEntityManager()
->createQueryBuilder()
->select('p')
->from('...\Player', 'p')
->getQuery()
->getResult();
返回的对象是一个Player数组。
关于查询结果格式的信息说:
结果要么是对象的普通集合(纯),要么是对象嵌套在结果行中的数组(混合)。
结果类型取决于什么以及如何实现获取集合对象?
getResult()
始终返回一个数组。如果你想要一个集合,你必须将 getResult()
返回的数组传递给 Doctrine 的 ArrayCollection
例如
use Doctrine\Common\Collections\ArrayCollection;
$result = $this
->getEntityManager()
->createQueryBuilder()
->select('p')
->from('...\Player', 'p')
->getQuery()
->getResult()
;
$players = new ArrayCollection($result);
由于您仅选择“p”对象(没有单独的列或聚合值)并且您使用 getResult() 作为水合作用模式,因此您的查询应该返回纯对象而不是数组。
我最好的猜测是,问题与您用来构建查询的速记语法有关。我尝试的第一件事是写出查询“长格式”,如下所示:
$em = $this->getEntityManager();
$qb = $em->createQueryBuilder();
$qb->select('p')
->from('...\Player', 'p');
$query = $qb->getQuery();
$players = $query->getResult();
我猜你的速记方法会很好,但我发现 Doctrine 在方法链接方面有点挑剔。
根据代码片段的简化程度,还有其他一些事情需要考虑。但根据我的经验,如图所示编写的查询将返回 Player 对象。
要返回对象而不是数组,您必须使用“部分对象”。
这里是经过测试的代码示例https://stackoverflow.com/a/12044461/1178870