我有一个实体,它连接到一个巨大的表:200000行。
我面临的问题是,当我将实体对象绑定到表单中时,我会得到以下错误:
致命错误:允许的内存大小134217728字节已用完(已尝试分配85字节)//public_html/application/vender/doctory/orm/lib/Doctory/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);
处理这样的事情的正确方法是什么?
很抱歉,200k表并不庞大,事实上,无论在哪里,MySql都应该在第二次内返回这样的查询。因此,我认为问题在于你的映射和索引或缺乏。您还应该研究数据库缓存,但首先要对索引和查询进行排序。
用更多代码更新您的问题。