2013-07-07 64 views
4

不知何故,学说不允许我比较两个低字符串值:一个变量和一个用户的名字。学说查询生成器LOWER不能正常工作

$qb = $this->getEntityManager()->createQueryBuilder(); 
    $qb 
     ->select('d') 
     ->from('MyBundle:User', 'd') 
     ->where('LOWER(d.firstName) LIKE :fName') 
     ->setParameter('fName', strtolower('%'.$fName.'%')); 

    $result = $qb->getQuery()->execute(); 

只有当$ FNAME有一个大写的字符串(即“抢”),它会返回结果,如“罗伯特”和“罗比”。但我想要的是,即使$ fName拼写为小写('rob'),这些结果也应该出现。看起来d.firstNames不会降低。为什么会这样?

回答

3

我找到了解决办法:

 $qb = $this->getEntityManager()->createQueryBuilder(); 
     $qb 
      ->select('u') 
      ->from('MyBundle:User', 'u') 
      ->where($qb->expr()->andX(
       $qb->expr()->like('LOWER(u.firstName)', '?1'), 
       $qb->expr()->like('LOWER(u.lastName)', '?2') 
      )) 
      ->setParameter('1', '%' . strtolower($firstName) . '%') 
      ->setParameter('2', '%' . strtolower($lastName) . '%'); 

     $result = $qb->getQuery()->execute(); 

仍然好奇,为什么第一次不工作。

0

你可以尝试

$query = $em->createQuery("SELECT u FROM Isha\SuvyaBundle\Entity\Useru WHERE   u.fName LIKE '%$fName%' "); 
    $result = $query->getResult(); 
+0

没有运气不幸 – apfz