我有一个实体加入了一个庞大的表: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);
处理这样的事情的正确方法是什么?
答案 0 :(得分:0)
很抱歉,但是200k表并不大,事实上,没有接近它的地方,MySql应该在亚秒内返回这样的查询。因此,我认为问题在于您的映射和索引或缺乏。您还应该查看数据库缓存,但首先要对索引和查询进行排序。
使用更多代码更新您的问题。