Web 使用查询生成器进行查询
我使用的是SYMFONY 4.12,我试图编写查询来过滤我的工作(我有工作表,départments one),我第一次尝试是有经验的,但我陷入了困境 这是我的报价控制器:Web 使用查询生成器进行查询,web,symfony4,Web,Symfony4,我使用的是SYMFONY 4.12,我试图编写查询来过滤我的工作(我有工作表,départments one),我第一次尝试是有经验的,但我陷入了困境 这是我的报价控制器: /** * @Route("/offres", name="offres") * @param Request $request * @param PaginatorInterface $paginator * @param FormFactoryInterface $formFactory * @return R
/**
* @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(),
]);
}
这是我在报价中的疑问:
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();
}
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();
}
当它输入任何数字时,它给出的是相同的东西,它显示了数据库中存储的所有作业,我不知道问题出在哪里。
尝试使用此解决方案:
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(OffreEmploi $data):?array
{
$query = $this->createQueryBuilder('o');
if ($data->getExperience() !== null) {
$query
->where('o.experience > :experience')
->setParameter('experience', $data->getExperience());
}
return $query->getQuery()->getResult();
}
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();
}
我想我找到了答案,但我只是创建了另一个包含所有表单字段的类,就是这样,我不知道它是如何工作的,因为我没有更改重要的内容,因为我想得到您的帮助 第一个解决方案给出的结果与我在问题中给出的第一个解决方案相同,它重新运行过滤器不起作用的所有作业。我尝试了第二个dd($data->getExperience()它在第60行给出了.OffreEmploiRepository.php:null我不理解当我尝试这些示例时出现的问题没有问题它给出了正确的结果我尝试过但都不起作用我有这个问题未定义的方法“findSearch”。方法名称必须以findBy、findOneBy或countBy开头!然后我用以下方法解决它:(qb=$this->repository->findSearch($data)),但它的工作方式与以前一样,它不过滤作业。我不知道如何修复这一混乱局面。您是否在OffreRepository中创建了findSearch函数?是的,我找到了。想寻求帮助,我找到了一个解决方案,即使没有区别,也没有更改,但它现在可以工作了