@NkDev

Как составить запрос на выборку в Symfony с объединением таблиц?

У меня есть проект на Symfony.
В базе данных есть таблица:

Product:

id: int
name: varchar

Для того чтобы получить все продукты я использую:

$candidates = $candidateRepository->findAll();

Далее я добавил еще одну таблицу Category и связал ее с Product методом OneToMany:

Category

id: int
name: varchar

Вопрос: Как мне модифицировать запрос findAll, чтобы я получал название категории для продукта?
---------
id_product
name_product
name_category
---------
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
@tukreb
1. Вам нужно объявить связи в сущностях - https://www.doctrine-project.org/projects/doctrine...
2. Написать метод в вашем репозитории, через createQueryBuilder
Например что- такое используя leftJoinc Join::WITH
public function getAllProductsWithCategories(): array
    {
        /** @var Product[] $entities */
        $entities = $this->repo->createQueryBuilder('t')
            ->select('t')
            ->leftJoin(Category::class, 't2', Join::WITH,'t.id = t2.product') //здесь джойним по полям, которые объявлены в наших сущностях (пункт 1)
            ->getQuery()
            ->getArrayResult();

        if (count($entities) === 0) {
            throw new EntityNotFoundException('No product.');
        }
        return $entities;
    }


Но 2 пункт очень специфичен и возможно не ваш случай, обычно, если вы правильно сделали 1 пункт, то есть, если Entity имеет правильные ассоциации вы сможете через них достать другие сущности.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы