@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
---------
  • Вопрос задан
  • 124 просмотра
Решения вопроса 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 имеет правильные ассоциации вы сможете через них достать другие сущности.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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