@Suleyman95

Как уменьшить количество запросов при выборке товаров на странице в связи Один к Одному?

Есть две сущности, Catalog и CatalogPrice, связь один к одному. Делаю выборку с пагинацией вот так:
/**
     * @Route("/{id}/{page}", name="catalog_by_category", requirements={"id"="\d+"}, defaults={"page"=1})
     */
    public function getByCat(EntityManagerInterface $em, $id, $page, Request $request)
    {
        $query = $em->getRepository(Catalog::class)->findByCategory($id);
        $currentCategory = $em->getRepository(Categories::class)->find($id);
        $limit = 50;

        $paginator = new Paginator($query, $fetchJoinCollection = false);
        $pageCount = ceil(count($paginator) / $limit);
        $pages = range(1, $pageCount);
        $catalog = $query
            ->setFirstResult($limit * ($page-1))
            ->setMaxResults($limit)
            ->getQuery()->getResult();

        dump($catalog);

        return $this->render('catalog/index.html.twig', [
            'catalog' => $catalog,
            'pages' => $pages,
            'category' => $currentCategory,
            'categoryId' => $id,
        ]);
    }

Метод findByCategory():
public function findByCategory($id)
    {
        $query = $this->createQueryBuilder('product')
//            ->join('product.catalogPrice', 'catalogPrice')
            ->where('product.category = :id')
            ->setParameter('id', $id);

        return $query;
    }

Лимит товаров на странице: 50. В итоге, после выборки получается 57 запросов к бд. Примечателен следующий фрагмент из логгера:
5fdb2171bf0bc546585599.png
Т.е. для каждого товара по запросу в бд для получения цены. Мне кажется это слишком). В чем же моя ошибка?
Кстати, при выборке таким способом, все работает нормально, запросов мало, как и должно быть.
$catalog = $em->getRepository(Catalog::class)->findBy(['category' => $id], [], 50);
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы