Я хочу получить данные из таблицы и закодировать их в json. Я использую доктрину и построитель запросов для выбора нужных мне данных (в основном это все из таблицы) Проблема в том, что в dev все работает нормально, но когда я захожу в prod, я получаю ошибку: PHP Fatal error: Недостаточно памяти ...
Данные, которые я получаю, не более 300 КБ.
В этом случае я использую маршрут для получения списка 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"
}
]
Построитель запросов доктрины и функция:
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 на сервер
- изменение значения memory_limit в php.ini
- не использовать jms_serialiser и использовать json_encode вместо
EDIT
Таким образом, ошибка определенно не поступает из сериализатора, так как ошибка выдается, когда я получаю данные из хранилища ( findAllProject () ).
Мне удалось заставить его работать за счет сокращения данных, которые я получаю, но это не решение, поскольку мне нужны все данные и, как я сказал, project - одна из самых маленьких таблиц, поэтому а когда мне нужно получить большие данные?
Если я получаю данные от Symfony, может быть, это не Symfony, а Apache, что может вызвать эту ошибку?
Кроме того, сгенерированный SQL-запрос из queryBuilder хорош (только обычный выбор)
КОНЕЦ РЕДАКТИРОВАНИЯ
Я не думаю, что это проблема как части кодирования json, так и проблемы конфигурации сервера apache (предел памяти равен -1).
Я думаю, что ассоциация таблицы project все испортила, и доктрина пытается пройтись по всей базе данных. Может быть, проблема с дизайном моей базы данных?
Например, таблица type имеет тот же размер, что и project , но не имеет ошибки нехватки памяти.
Не знаю, что еще я могу попробовать, любая идея?