我在这里请求你帮我解决我遇到的Symfony 4问题。
事实上,我使用Symfony 4开发了一个休息API,直到今天,当API的调用变得非常慢时,一切都运行良好。
首先,他给了我以下错误:在第186行2019-03-20T12的/home/user/tlt_symfony_back/vendor/jms/serializer/src/JsonSerializationVisitor.php中,允许的内存大小为268435456字节(试图分配98570240字节): 55:19 + 01:00 [critical]致命错误:允许的内存大小为268435456字节耗尽(尝试分配98570240字节)
我通过在php.ini中将memory_limit设置为512M来解决,但是在回答之前调用时间太长。随着邮差,它完全关闭窗口。
我使用FOSRestBundle和Jms_serializer。
预先感谢您的帮助。
这是获取所有公告的示例代码:
public function getAnnonces(Request $request, ObjectManager $manager){
$annonces = $manager->getRepository(Annonces::class)->findAll();
if(!$annonces)
return new JsonResponse([
'status' => 'error',
'message' => 'Il existe aucune annonce'
]);
return $annonces;
}
Annonces Entity具有基本属性:title:string,type:string,user:ManyToOne与user Entity的关系
数据库:Mysql。
尝试在存储库调用之后转储$ annonces,是否真的有一个轻量级对象?尝试获得一个公告
$annonces = $manager->getRepository(Annonces::class)->find(1);
你需要在这里有关系的学说实体吗?如果没有,请尝试获取内容的数组
$qb = $manager->createQueryBuilder();
$annonces = $qb->select('a')->from(Annonces::class, 'a')->getQuery()->getResult(\PDO::FETCH_ASSOC);
如果在没有任何源代码更改的情况下出现问题,则意味着它是从头开始的,但是它的比例并不是您所知的。
我的第一个镜头是检查数据库关系。例如,如果你有一个关于fetch =“EAGER”或fetch =“LAZY”的OneToMany关系,并且你在右侧表中有很多元素,它将减慢查询左侧表的速度。你可以做一个简单的检查,就是在Annonces实体中为每个OneToMany和ManyToMany关系添加fetch =“EXTRA_ LAZY”这个问题。
https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/tutorials/extra-lazy-associations.html https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/annotations-reference.html#annref_onetomany
如果这没有帮助,我建议你检查表索引。