使用查询生成器查询

问题描述 投票:0回答:1

我正在使用符号4.12,我试图编写查询来过滤我的工作(我有工作表,一个部门),我首先尝试了一些经验,但是遇到了麻烦这是我的offerController:

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

    ]);
}

}这是我在offerRepositor中的查询:

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

当输入任何数字时,如果它给出相同的内容,则会显示数据库中存储的所有作业,我不知道问题出在哪里,有人可以帮助我解决这个问题。THE RESULT

web symfony4
1个回答
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();

}
© www.soinside.com 2019 - 2024. All rights reserved.