$queryBulder = $repo->createQueryBuilder('a');
$items = $queryBulder->getQuery()->getArrayResult();
//$qparametrizer - кастомный класс, забирающий параметры выборки из клиентского запроса
$queryBulder = $repo->createQueryBuilder('a');
$query = $queryBulder->getQuery();
$items = new Paginator($query);
$itemsCount = count($items);
$pagesCount = ceil($itemsCount / $qparametrizer->getLimit());
$data = $items
->getQuery()
->setFirstResult($qparametrizer->getOffset())
->setMaxResults($qparametrizer->getLimit())
->getResult()
;
return $this->json([
'data' => $data,
]);
class CircularReferenceHandler
{
public function __invoke($object) {
return $object;
}
}
$queryBulder = $repo->createQueryBuilder('a');
$items = $queryBulder->getQuery()->getArrayResult();
Вы даже не предоставили код сущности и разметки маппинга чтобы доказать что двунаправленные связи работают неверно.
Я уже разобрался с этой проблемой, убрал inversedBy, что предотвратило зацикливание
вы утверждайте что проблема производительности в двунаправленных связях, но это не проблема, вы тем самым вводите других в заблуждение.
По-умолчанию если сущность содержит двунаправленные связи и вы например делайте findAll() то доктрина вам отдаст только поля сущности без связей! Проверьте это и убедитесь что там будет только 1 select запрос.
И проверил, и убедился, и уже не раз. Теперь проверьте нормализацию сущностей в JSON. Нормализатор потянет все связи и свалится. Скорее всего, именно на инверсиях, т. к. отключая их, получаем нормальный
public function someAction(
\Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository $repo,
\Symfony\Component\HttpFoundation\Request $request
): \Symfony\Component\HttpFoundation\Response
{
$queryBulder = $repo->createQueryBuilder('a');
$em = $queryBulder->getEntityManager();
$MetaData = $em->getClassMetadata($repo->getClassName());
$associations = $MetaData->getAssociationMappings();
}