【问题标题】:Doctrine Query Builder LOWER not workingDoctrine Query Builder LOWER 不工作
【发布时间】:2013-07-04 21:48:06
【问题描述】:

不知何故,原则不允许我比较两个较低的字符串值:变量的值和用户的名字。

    $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 有一个大写字符串时(即 'Rob'),它才会返回像 'Robert' 和 'Robby' 这样的结果。但我想要的是,即使 $fName 拼写为小写('rob'),这些结果也应该出现。 d.firstNames 似乎没有降低。为什么会这样?

【问题讨论】:

    标签: symfony doctrine lowercase


    【解决方案1】:

    我找到了解决办法:

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

    仍然好奇为什么第一次尝试没有成功。

    【讨论】:

      【解决方案2】:

      你可以试试

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

      【讨论】:

        【解决方案3】:

        你可以使用:

        mb_strtolower()
        

        http://php.net/manual/en/function.mb-strtolower.php

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-10-22
          • 1970-01-01
          • 1970-01-01
          • 2015-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多