使用查询生成器查询

时间:2020-03-18 10:51:26

标签: web symfony4

我正在使用符号4.12我正在尝试编写查询以过滤我的工作(我有工作表,一个部门),我首先尝试了经验,但我陷入了困境 这是我的offerController:

COPY conf/my-httpd.conf /usr/local/apache2/conf/httpd.conf

这是我在offerRepository中的查询:

/**
 * @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(),

    ]);
}

当输入任何数字时,IT会显示与存储在数据库中的所有作业相同的内容,但我不知道问题出在哪里。 THE RESULT

2 个答案:

答案 0 :(得分:0)

尝试使用此解决方案:

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,
    ));

}

在formType中:

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();

}

答案 1 :(得分:0)

我想我找到了答案,但是我只是创建了另一个包含该表单所有字段的类,这就是我不知道它是如何工作的,因为我没有为此而改变重要的事情来为您提供帮助。

相关问题