查询构建器getResult()性能

时间:2014-04-17 23:11:23

标签: symfony doctrine twig circular-dependency

(编辑后期末的解决方案)

我使用最新的Symfony2,创建小应用程序。

我有这个问题:

$qb = $repository->createQueryBuilder('first')
        ->select('first')
        ->join('first.second', 'second')
        ->join('second.third', 'third')
        ->where('third.id = :id')
        ->setParameters(array('id' => 1));
$query = $qb->getQuery();

当我打电话

$query->getArrayResult();

一切正常。

但是当我打电话时

$query->getResult();

我返回空白页并在日志中出现此错误:

  

emergency.EMERGENCY:允许的内存大小为402653184字节耗尽(尝试分配384040960字节){"键入":1,"文件":" / srv / no /vendor/twig/twig/lib/Twig/Extension/Debug.php","line":66} []

我不知道问题出在哪里,这3个表每个都有少于100条记录(50,60,5),查询应该只返回12个对象,而我在twig模板中所做的只是转储这12个对象...

修改

我发现问题出在哪里,看起来整个问题都是twig dump()函数。它会进入无限循环(这就是为什么内存会上升),因为symfony2实体是互连的...所以它的首先转储 - >秒 - >第一次 - >秒......依此类推。

至少这是我的理论,因为只要我停止转储并只显示个别变量,一切都很好。

1 个答案:

答案 0 :(得分:1)

你有循环依赖:你的一些实体依赖于另一个。它可以是双向关系或其他。您可以使用partial syntax来避免加载额外数据。