【发布时间】:2012-03-21 12:18:42
【问题描述】:
所以我需要在我的实体存储库中创建一个自定义查询来进行子选择。
查询本身似乎是正确的,并且确实找到了我想要的结果(我通过在 Navicat 中运行查询来检查)但是,当尝试查看结果时(使用 Twig 模板)我收到以下错误:
第 42 行的 DEMODemoBundle:Staff/Company:company.html.twig 中不存在“Array”的项“id”
该模板中的第 42 行是:
<td><a href="{{ path('staff_company_show', { 'id': entity.id }) }}">{{ entity.id }}</a></td>
以前,我在控制器中使用基本的“findAll”查询,Twig 模板运行良好(它使用 for 循环遍历结果并打印出表格)
所以,我假设如果我的自定义查询获取了一个结果列表,并且所有列都相同(在子选择中只添加了 1 个额外的列,但不是提到的 ID),那么一切都应该没问题!
但显然不是。似乎由于某种原因还有另一个 Array 级别,我不确定为什么?
这是我在 repo 中的自定义查询(它执行子选择以创建 parent_name 列):
public function getCompanyWithParent()
{
$dql = 'SELECT c, (SELECT p.name FROM DEMO\DemoBundle\Entity\User\Company p WHERE p.id = c.parent) as parent_name FROM DEMO\DemoBundle\Entity\User\Company c';
$query = $this->getEntityManager()->createQuery($dql);
return $query->getArrayResult();
}
我都试过了:
return $query->getArrayResult();
和
return $query->getResult();
但无济于事。
各位有什么想法吗?
【问题讨论】:
-
能否在将 getCompanyWithParent 的结果传递给渲染函数之前在控制器中执行 var_dump ?它应该向您展示您的阵列的外观。
-
现在会这样做。奇怪的是,我在不同的存储库中有另一个自定义查询,它工作正常,代码是相同的(就结构而言):S
-
在使用基本的“findAll”查询时,我无法使用 var_dump,因为它会使应用程序崩溃(我相信这是由于 Doctrine 返回了一个循环数组/对象)。基本上,看起来我的自定义查询由于子选择而添加了一个额外的数组维度(我通过删除子选择进行了测试,一切都很好!)