【问题标题】:symfony2 search form querybuilder with parameters带参数的 symfony2 搜索表单查询构建器
【发布时间】:2017-04-15 22:19:32
【问题描述】:

这是左侧页面的图片我在提交时有一个表单我希望它使用用户输入的信息在右侧显示找到的车辆,否则如果用户没有转到页面显示的表单所有汽车。在这两种情况下,用户都应该只看到价格不为 0 的汽车

这是我的表格,以备不时之需,但我在这里 VoitureType3.php 没有问题:

$builder
->add('marque', EntityType::class,array(
        'class' => 'SpoiledCarFrontOfficeBundle:Marque',
        'required'      => true, 
        'empty_value'   => '== Choisissez une Marque ==',
         ))

       ->add('modele', DependentFormsType::class,array(
       'entity_alias'   => 'modele_by_marque',
       'parent_field'   => 'marque',
       'empty_value'    => '== Choisissez un Modele =='


         ))
    ->add('chevaux', 'choice', array( 'choices' => array('4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10', '11' => '11', '12' => '12', '13' => '13', '14' => '14', '15' => '15', '16' => '16'),'expanded' => false, 'required' => true,
     'multiple' => false,   'label' => 'Nombre de Chevaux' )) 
    ->add('boitevitesse', 'choice', array( 'choices' => array('Automatique' => 'Automatique', 'Manuelle' => 'Manuelle', 'Sequentielle' => 'Sequentielle'),'expanded' => false, 'required' => true,
     'multiple' => false,   'label' => 'Boite de Vitesse' ))       

这是我的控制器:

  $filterForm = $this->createForm('SpoiledCar\FrontOfficeBundle\Form\VoitureType3');

 $em = $this->getDoctrine()->getManager();
  $voiturefind = $em->getRepository('SpoiledCarFrontOfficeBundle:Voiture')->myFindAll($filterForm);
 $voitures  = $this->get('knp_paginator')->paginate($voiturefind,$this->get('request')->query->get('page', 1),6); 

// Bind values from the request
$filterForm->handleRequest($request);

 if ($filterForm->isSubmitted() && $filterForm->isValid()) {
  return $this->render('FOSUserBundle:Profile:listTable.html.twig', array(
        'voitures' => $voitures,


 ));
   }
   return $this->render('FOSUserBundle:Profile:listTable.html.twig', array(
        'voitures' => $voitures,
        'filterForm' => $filterForm->createView(),

  ));

我收到此错误:

  Attempted to call an undefined method named "andWhere" of class "Doctrine\ORM\Query". 

这是我的查询构建器,我认为问题来自这里,但我不知道我到底做错了什么

public function myFindAll(FormInterface $filterForm)
{

  $qb = $this->createQueryBuilder('p')
    ->Where('p.prix IS NOT NULL')
    ->getQuery();
 if ($filterForm->has('marque')) {
 $qb->andWhere( $qb->expr()->like('u.marque', ':marque'))
  ->setParameter('marque', '%'. $filterForm->get('marque')->getData().'%');
  }
  if ($filterForm->has('modele')) {
 $qb->andWhere( $qb->expr()->like('u.modele', ':modele'))
 ->setParameter('modele', '%'. $filterForm->get('modele')->getData().'%');
  }

 if ($filterForm->has('boitevitesse')) {
 $qb->andWhere( $qb->expr()->like('u.boitevitesse', ':boitevitesse'))
->setParameter('boitevitesse', '%'. $filterForm->get('boitevitesse')- >getData().'%');
  }

 if ($filterForm->has('chevaux')) {
$qb->andWhere( $qb->expr()->like('u.chevaux', ':chevaux'))
->setParameter('chevaux', '%'. $filterForm->get('chevaux')->getData().'%');
}

return $qb->getResult();
}

【问题讨论】:

    标签: symfony controller repository query-builder dql


    【解决方案1】:

    在其他可选表达式之前调用 getQuery() 方法...

    尝试“移动它”:

    public function myFindAll(FormInterface $filterForm)
    {
         $qb = $this->createQueryBuilder('p');
    
         /***/
    
         return $qb->getQuery()->getResult();
    }
    

    【讨论】:

    • 好吧,我收到另一个错误 ps:marque 和 modele 是其他表通过外键连接到表 voiture [Semantical Error] line 0, col 91 near 'marque LIKE :marque': Error: Invalid路径表达式。必须是 StateFieldPathExpression。
    • like('u.marque', ':marque') u?你在哪里找到的?
    • 我修复了我忘记了我将它们更改为 p 但是当我删除 marque 和 modele 它工作正常时我得到了那个错误!
    • 不删除marque & modele会出现什么错误?
    • [语义错误] 第 0 行,第 91 列靠近 'marque LIKE :marque':错误:无效的 PathExpression。必须是 StateFieldPathExpression。
    猜你喜欢
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多