【发布时间】:2017-03-22 23:22:26
【问题描述】:
我有一个 symfony 2.8 应用程序,它使用学说查询来生成分页列表以显示申请人表中的所有记录。直到最近都很好用。
现在,当我导航到该页面时,我在 IE 和 Chrome 中收到错误消息,或者在 Firefox 中收到空白屏幕。
HTTP 标头显示 500 错误,但我的 symfony 日志或 PHP 错误日志中没有任何内容(错误日志在 php.ini 中打开)
我认为存在代码问题,因此花了几个小时尝试调试该问题。
在插入大量 try/catch、echo、debug、print_r 和 var_dump 语句以及针对数据库测试可运行查询、查看实际数据、设置限制和查询部分集之后,我确信 仅当我尝试在我的应用程序中返回超过 13578 条记录时才会出现问题。
这是我的查询构建器语句:
$query = $this->getEntityManager()->createQueryBuilder();
$query->select("a")
->from("ApplicationBundle:Applicant", "a")
->where("a.id > 0 ");
return $query->getQuery()->getResult();
我可以返回实际的 SQL,对数据库运行它并获取所有内容,但我没有得到 getResult() 调用返回的任何内容。甚至没有错误!
如果我将其更改为:
$query = $this->getEntityManager()->createQueryBuilder();
$query->select("a")
->from("ApplicationBundle:Applicant", "a")
->where("a.id < 13579 ");
return $query->getQuery()->getResult();
为了降低表中数据损坏的可能性,我测试了以下内容,它也有效:
$query = $this->getEntityManager()->createQueryBuilder();
$query->select("a")
->from("ApplicationBundle:Applicant", "a")
->where("a.id > 13578 ");
return $query->getQuery()->getResult();
我已经搜索了有关结果集最大大小的任何限制的文档,但没有找到任何东西。有谁知道这是否是由学说/symfony 设置的限制,或者有没有人遇到过类似的问题并设法克服它?
编辑
- 我正在使用 KNPPaginatorBundle 对记录进行分页
- php.ini 最大内存已经翻倍
【问题讨论】:
-
检查错误日志我押注内存不足
-
你看过 KnpPaginatorBundle 了吗? 13579 个结果需要处理很多。
-
为什么要一次提取 13579 个结果?查看
yield。 php.net/manual/en/language.generators.syntax.php -
忘了说我已经把脚本可以使用的最大内存翻了一番,达到了 256M。
-
我已经在使用 KNP 分页器对结果集进行分页
标签: php mysql symfony doctrine-orm