6

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

    $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 似乎没有降低。为什么会这样?

4

3 回答 3

7

我找到了解决方案:

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

仍然很好奇为什么第一次尝试不起作用。

于 2013-07-08T06:22:48.597 回答
-1

你可以试试

  $query = $em->createQuery("SELECT u FROM Isha\SuvyaBundle\Entity\Useru WHERE          u.fName LIKE '%$fName%' ");
  $result = $query->getResult();
于 2013-07-07T12:28:57.860 回答
-2

您可以使用 :

mb_strtolower()

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

于 2017-03-29T06:18:33.773 回答