Autor Wątek: Wyszukiwarka tagów w relacji wiele do wielu - brak wszystkich danych - DOCTRINE  (Przeczytany 119 razy)

bboymietek

  • Newbie
  • *
  • Wiadomości: 10
    • Zobacz profil
Witam. Mam następujący problem:

2 encje: pracownicy i zawody w relacji wiele do wielu

Zrobiłem podstronę z wyszukiwarką pracowników, gdzie po wybraniu zawodu wyświetlają mi się pracownicy którzy mają ten zawód.

Problem jest taki że w wynikach wyszukiwania jeżeli pracownik ma np wpisane zawody: piekarz, cukiernik, a użytkownik skorzysta z wyszukiwarki i zaznaczy że chce wyszukać piekarzy to na wynikach wyszukiwania na widoku w szablonie widać tylko ten jeden zawód który wyszukiwałem tak jakby zniknęła ta informacja o pozostałych zawodach jakie ten pracownik ma przypisane

Podaje fragmenty kodu jak to zrobiłem - to wyszukiwanie:

KONTROLER:
/**
     * @Route("/pracownicy", name="workers")
     */
    public function workers(PaginatorInterface $paginator, Request $request, WorkerRepository $workerRepository)
    {
        $form = $this->createForm(WorkerSearchType::class, null, [
            'method' => 'GET',
        ]);

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $professions = $form->get('professions')->getData();

            $qb = $workerRepository->createQueryBuilder('w')
                ->select('w, p, l')
                ->leftJoin('w.professions', 'p');

            if (isset($professions) && count($professions) > 0) {
                $qb->andWhere('p.id IN (:professions)')
                    ->setParameter('professions', $professions);
            }

            $qb = $qb->getQuery();
        }

        return $this->render('kraft/workers.html.twig', ['pagination' => $paginator->paginate($qb, $request->query->getInt('page', 1), 20), 'form' => $form->createView()]);
    }


Czyli to tak jakbyśmy mieli tagi do czegoś przypisane i potem robimy wyszukiwarkę po tagach i klient wybiera jakiś jeden tag to po wyszukaniu i wyświetleniu wyników tam gdzie wyświetlalibyśmy tagi będzie tylko ta nazwa którą szukaliśmy mimo że coś może mieć przypisane kilka tagów.

Bardzo proszę o pomoc - stawiam "pifko" :)

Valantir

  • Global Moderator
  • Hero Member
  • *****
  • Wiadomości: 593
    • Zobacz profil
Spróbuj zrobić inaczej, a mianowicie zaczynając nie od pracownika, a od samego zawodu.:

$qb = $workerRepository->createQueryBuilder('p')
                ->select('p, w, l')
                ->leftJoin('p.workers', 'w');

            if (isset($professions) && count($professions) > 0) {
                $qb->andWhere('w.id IN (:professions)')
                    ->setParameter('professions', $professions);
            }