额外的大表导致允许的内存大小为x字节耗尽错误

时间:2015-12-29 15:54:47

标签: php orm doctrine-orm zend-framework2

我有一个实体加入了一个庞大的表:200.000行。

我面临的问题是,当我将实体对象绑定到表单中时,我收到以下错误:

  

致命错误:允许的内存大小为134217728字节耗尽(尝试过   分配85个字节)   /../public_html/application/vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php   在第296行

注释是:

/**
 * @ORM\OneToMany(targetEntity="This\Entity\Table", mappedBy="id")
 **/
private $sometable;

我认为正在发生的是,Doctrine正试图将表加载到内存中,这就是杀死进程的原因。

当我评论表格时,一切都按预期工作。

我读到了延迟加载并尝试将其添加到注释中:

 fetch="EXTRA_LAZY"

然而它没有解决问题。

我通过服务加载实体:

$object = $this->someRepository->find($id);
// And bind..
$this->form->bind($object);

处理这样的事情的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

很抱歉,但是200k表并不大,事实上,没有接近它的地方,MySql应该在亚秒内返回这样的查询。因此,我认为问题在于您的映射和索引或缺乏。您还应该查看数据库缓存,但首先要对索引和查询进行排序。

使用更多代码更新您的问题。