我正在使用符号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
尝试此解决方案:
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();
}