Php 超大表导致允许的内存大小为x字节的错误
我有一个连接到大型表的实体:200.000行 我面临的问题是,当我将实体对象绑定到表单中时,会出现以下错误: 致命错误:允许的内存大小134217728字节已用尽(已尝试 在中分配85个字节) /../public_html/application/vendor/doctrine/orm/lib/doctrine/orm/Internal/Hydration/AbstractHydrator.php 在线296 注释为:Php 超大表导致允许的内存大小为x字节的错误,php,orm,doctrine-orm,zend-framework2,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="T
/**
* @ORM\OneToMany(targetEntity="This\Entity\Table", mappedBy="id")
**/
private $sometable;
我认为正在发生的事情是,条令试图将表加载到内存中,而这正是扼杀进程的原因
当我对表格进行注释时,一切正常
我阅读了有关延迟加载的内容,并尝试将其添加到注释中:
fetch="EXTRA_LAZY"
然而,这并没有解决问题
我通过服务加载实体:
$object = $this->someRepository->find($id);
// And bind..
$this->form->bind($object);
处理这种情况的正确方法是什么?很抱歉,200k表并不庞大,事实上,无论在什么地方,MySql都应该在亚秒时间内返回这样的查询。因此,我认为问题在于您的映射和索引或缺少。您还应该查看数据库缓存,但首先要对索引和查询进行排序
用更多代码更新您的问题。如果不知道相关表中的数据大小、查询方式、关联方式(uni bi/direct)以及DoctrineORMModule的当前配置,很难说内存耗尽的正确原因。出于开发目的,
128M
的内存对于大型、成熟和复杂的库(如doctrine)来说非常低。我强烈建议将php.ini
中的内存限制增加到256M
或更高。你能把这个问题再改进一点吗?。例如,在您的环境中是否启用了xdebug
?