Запросы с помощью Query Builder - PullRequest
0 голосов
/ 18 марта 2020

Я ИСПОЛЬЗУЮ SYMFONY 4.12 Я пытаюсь написать запросы, чтобы отфильтровать мои работы (у меня есть таблица вакансий, один из отделов) Я сначала пробую с опытом, но я застрял здесь, вот мое предложение. Контроллер:

/**
 * @Route("/offres", name="offres")
 * @param Request $request
 * @param PaginatorInterface $paginator
 * @param FormFactoryInterface $formFactory
 * @return Response
 */
public function offreSearch(Request $request, PaginatorInterface $paginator ,FormFactoryInterface $formFactory):Response
{

    $datas =new OffreEmploi();
    $formFilter=$formFactory->create(OfferFilterForm::class,$datas);
    $offres = $this->repository->findSearch($datas);

    $formFilter->handleRequest($request);

    return $this->render('offre/index.html.twig', [
        'controller_name' => 'OffreController',
        'offres' => $offres,
        'formulaire'   =>$formFilter->createView(),

    ]);
}

и это мой запрос в offerRepository:

public function findSearch(OffreEmploi $data):?array
{
    $query = $this->createQueryBuilder('o');
    if ($data->getExperience() !== null) {

        $query
            ->where('o.experience > :experience')
            ->setParameter('experience', $data->getExperience());

    }
    return $query->getQuery()->getResult();
}

, когда дело доходит до ввода любого числа, ИТ дает то же самое, что показывает все задания, хранящиеся в базе данных, я не не знаю, где проблема. РЕЗУЛЬТАТ

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Я думаю, что нашел ответ, но я просто создал еще один класс ведьмы, содержащий все поля формы, и это все, что я не знаю, как это работает, потому что я не изменил важные вещи для этого, думает с вашей помощью.

0 голосов
/ 18 марта 2020

Попробуйте использовать это решение:

public function findSearch(OffreEmploi $data):?array
{
  $query = $this->createQueryBuilder('o');
  if (!empty($data->getExperience())
  // ...
  }
  return $query->getQuery()->getResult();
}

Если это не сработает, попробуйте сбросить $ data-> getExperience (), чтобы увидеть его значение

public function findSearch(OffreEmploi $data):?array
{
  $query = $this->createQueryBuilder('o');

  dd($data->getExperience()) ; 
}

РЕДАКТИРОВАТЬ

Так что попробуйте сделать это , но убедитесь, что вы отправляете форму методом GET, а не POST :

public function offreSearch(Request $request, PaginatorInterface $paginator)
{
    $em = $this->getDoctrine()->getManager();
    $form = $this->createForm(OfferFilterForm::class);
    $form->handleRequest($request);
    $data = $request->query->all();

    $qb = $em->getRepository(OffreEmploi::class)->findSearch($data);

    $offres = $paginator->paginate($qb, $request->query->get('page', 1), 20);

    return $this->render('offre/index.html.twig', array(
        'formulaire'   =>$form->createView(),
        'offres' => $offres,
    ));

}

В форме типа:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('experience', IntegerType::class);

    //.....

}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => null,
        'csrf_protection' => false,
    ));
}


public function getBlockPrefix()
{
    return null;
}

и в репозитории:

public function findSearch($data)
{
    $query = $this->createQueryBuilder('o');
    if (!empty($data['experience'])) {
        $query
            ->where('o.experience > :experience')
            ->setParameter('experience', $data['experience']);
    }
    return $query->getQuery()->getResult();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...