我想从表中获取数据并将其编码为json。我正在使用主义和querybuilder选择我想要的数据(基本上是表中的所有内容)。问题是,在开发人员中,一切正常,但是当我进入产品时,出现错误:PHP致命错误:内存不足...
我正在检索的数据最多为300KB。 在这种情况下,我使用路由来检索 project (600B)的列表,它是最小的表之一。 该表具有两个 OneToMany 关联。
我正在检索的数据如下:
[
{
id: "bar",
name: "bar",
description: "bar",
project_date_start: "2022-01-01 00:00:00",
project_date_end: "2019-05-21 12:19:27"
},
{
id: "foo",
name: "foo",
description: "foo",
project_date_start: "2021-02-02 00:00:00",
project_date_end: "2022-02-02 00:00:00"
}
]
该学说的querybuilder和函数:
public function findAllProject()
{
return $this->createQueryBuilder('p')
->select('p.id', 'p.name', 'p.description', 'p.project_date_start', 'p.project_date_end')
->getQuery()
->getResult()
;
}
public function project(Request $request)
{
$em = $this->getDoctrine()->getEntityManager();
$projectRepo = $this->getDoctrine()->getRepository(Project::class);
$project = $projectRepo->findAllProject();
$data = $this->get('jms_serializer')->serialize($project, 'json');
$response = new Response($data);
$response->headers->set('Content-Type', 'application/json');
$response->headers->set('Access-Control-Allow-Origin', '*');
return $response;
}
我已经尝试过:
-在服务器上重新安装Apache
-在php.ini中更改memory_limit的值
-不使用 jms_serialiser 而是使用 json_encode
编辑
所以绝对不是从序列化程序来的错误,因为从存储库( findAllProject())获取数据时抛出了错误。
我设法通过减少要检索的数据来使其正常工作,但这不是解决方案,因为我需要所有数据,并且正如我所说的 project 是最小的表之一,那我什么时候需要检索更大的数据呢?
如果我要从symfony获取数据,也许不是symfony而是apache,是什么原因导致此错误?
此外,从queryBuilder生成的SQL很好(只是普通选择)
END EDIT
我认为这不是json编码部分的问题,也不是apache服务器配置问题(内存限制为-1)。
我认为 project 表的关联使所有事情搞砸了,而学说则试图遍历所有数据库。也许我的数据库设计有问题?
例如,表 type 与 project 的大小相同,但没有内存不足错误。
我不知道还能尝试什么,知道吗?
答案 0 :(得分:0)
因此,我从头开始重新安装服务器,然后重新启动项目,该服务器正常运行,所以我不知道是什么导致了此问题。