У меня есть 2 объекта: работник (идентификатор, имя) и профессия (идентификатор, название).
У меня есть несколько работников с одной или несколькими профессиями. Когда я открываю веб-сайт, я вижу рабочие данные по всем профессиям рабочих. Например:
ID: 2 - Том - учитель, водитель
Затем я создал форму поиска, где я могу выбрать по типу сущности некоторые профессии и нажать кнопку поиска. После этого я вижу список работников, но некоторые профессии исчезают, я вижу только эти профессии, которые я выбираю по форме. Например, когда я пытаюсь найти драйверы:
ID: 2 - Tom - водитель (текст: профессия учителя исчезает из результатов)
Это должен быть ID: 2 - Tom - учитель, водитель (то же самое как и раньше, но в списке должны отображаться только лица, имеющие профессию водителя, но текст об остальной профессии должен быть здесь, чтобы прочитать)
Код из контроллера поиска:
$repository = $this->getDoctrine()->getRepository(Worker::class);
$form = $this->createForm(WorkerSearchType::class, null, [
'method' => 'GET',
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$professions = $form->get('professions')->getData();
$qb = $repository->createQueryBuilder('w')
->select('w, p')
->leftJoin('w.professions', 'p');
if(isset($professions) && count($professions)>0){
$qb->andWhere('p.id IN (:professions)')
->setParameter('professions', $professions);
}
$qb = $qb->getQuery();
}
if(!isset($qb)){
$qb = $repository->createQueryBuilder('w')
->select('w')
->orderBy("w.created", 'DESC')
->getQuery();
}
Фрагмент типа формы:
$builder
->add('professions', EntityType::class, array(
'class' => Profession::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.name', 'ASC');
},
'choice_label' => 'name',
'multiple' => true,
'expanded' => false,
'required' => false,
'label' => false,
))
;