我有Movie实体,它与Actor、Director、Producer,公司等实体有ManyToMany连接。
在剪辑电影时,有很多实体(演员: 90k,导演: 40k,制片人: 20k,公司: 40k)可供选择。
当我试图在Sonata中为我的实体加载“编辑”页面时,我会得到错误500,而php日志(比如Allowed memory size of 134217728 bytes exhausted )位于以下文件之一:
\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php on line 2577
\vendor\doctrine\orm\lib\Doctrine\ORM\Internal\Hydration\AbstractHydrator.php on line 296
\vendor\doctrine\orm\lib\Doctrine\ORM\Internal\Hydration\ObjectHydrator.php on line 529它在固定装置上工作,当每个实体在DB中有10个对象时。
我目前正在测试迁移,我假设编辑页面上会有大量的数据,而且页面本身的工作速度可能很慢(将有四个select2字段,每个多个选项,每个实体将有数千个实体连接到编辑的实体),但我感到惊讶的是,这种情况发生在Doctrine级别。我希望Sonata能够处理它,因为它在列出大量的Actor对象、分页等方面没有问题。
我应该如何安排与Movie实体的工作?你能给我点建议吗?我正在考虑changing that CRUD page,这样Select2就可以使用Ajax获取数据,但我仍然不确定这是一个最好的主意。
发布于 2016-02-22 11:40:06
您需要考虑如何使用应用程序。在您的编辑面板中,您认为是否列出了所有可能的关系(演员、导演…)你的实体会是最好的UX,我不这么认为。
您的实体将获取所有依赖项并在对象中补充它们。您可以看到,即使将内存限制设置为1,内存也是一个问题。
我建议的是使用自动完成。这样,您将不会加载数千个无用的数据,应用程序将更快,用户将能够搜索他正在寻找的东西,而不是在一个无休止的选择框中搜索。
希望能帮上忙。
发布于 2016-02-22 10:49:22
可以通过向memory_limit添加更多内容来增加php.ini
若要在phpInfo();上找到正确的AppKernel.php位置,并在输出中搜索"php.ini“,请编辑ini文件并将行´memory_limit更改为2G。
此外,如果可能的话,您应该避免对象化(将结果行水化为实体),这会导致内存大小耗尽,下面是一些信息
http://labs.octivi.com/mastering-symfony2-performance-doctrine/
https://stackoverflow.com/questions/35551204
复制相似问题