【问题标题】:Symfony2 - Custom Query in Entity Repo doesn't seem to return expected resultsSymfony2 - 实体回购中的自定义查询似乎没有返回预期的结果
【发布时间】: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 返回了一个循环数组/对象)。基本上,看起来我的自定义查询由于子选择而添加了一个额外的数组维度(我通过删除子选择进行了测试,一切都很好!)

标签: php symfony doctrine


【解决方案1】:

排序。似乎我必须指定我想要通过的列,例如SELECT c.id, c.name ...,遗憾的是不能只使用 SELECT c, ... FROM ...

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 2021-01-12
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多