6

どういうわけか教義では、変数の値とユーザーの名前の 2 つの下位文字列値を比較することができません。

    $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 に答える
-2

あなたが使用することができます:

mb_strtolower()

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

于 2017-03-29T06:18:33.773 に答える