【发布时间】:2015-12-29 15:54:47
【问题描述】:
我有一个实体连接到一个大表: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);
处理此类事情的正确方法是什么?
【问题讨论】:
-
在不知道相关表中的数据大小、查询方式、关联方式(单双向/直接)和当前配置的DoctrineORMModule的情况下,很难说出内存耗尽的正确原因。出于开发目的,
128M的内存非常低,无法用于大型、成熟和复杂的库,例如教义。我强烈建议将php.ini中的memory_limit增加到256M或更高。你能再改进一下这个问题吗?例如,您的环境是否启用了xdebug?
标签: php orm doctrine-orm zend-framework2