使用findoneby()进行不区分大小写的搜索

时间:2014-09-23 13:22:29

标签: symfony case-insensitive

我有一个名为$colorMaster

的存储库
$colorMaster->findOneBy(array("name"=>'RED');

它不会返回任何记录,即使在我的数据库中有记录值为"红色"。

当我尝试使用相同的代码和红色'

$colorMaster->findOneBy(array("name"=>'Red');

它返回值。

我们有什么方法可以从中获取不区分大小写的记录 symfony findOneBy(); 因此,它可以使用价值" RED"还

2 个答案:

答案 0 :(得分:12)

问题不在Symfony级别,而是在数据库级别。其中一些是区分大小写的,有些则不是。你的情况显然是区分大小写的。要获得结果,无论如何,请尝试以下方法:

     $name = 'REd'; //case doesn't matter
     $colorMaster->createQueryBuilder('a')
        ->where('upper(a.name) = upper(:name)')
        ->setParameter('name', $name)
        ->getQuery()
        ->execute();

答案 1 :(得分:0)

接受的答案对我不起作用,据说是由于不区分大小写的字符集。

$name = 'REd';
$qb   = $this->createQueryBuilder('a');

// still returns case insensitive results
$qb->where($qb->expr()->upper('a.name'), $qb->expr()->upper(':name'))
    ->setParameter('name', $name, Type::STRING);

// doctrine syntax error
$name = 'REd';
$qb   = $this->createQueryBuilder('a');
$qb->where('BINARY a.name = :name')
    ->setParameter('name', $name, Type::STRING);

// this finally works
$name = 'REd';
$rsm  = new ResultSetMappingBuilder($this->_em);
$rsm->addRootEntityFromClassMetadata('UserBundle:User', 'u');
$query = $this->_em->createNativeQuery('SELECT u.* FROM users u WHERE u.name LIKE BINARY :name', $rsm);
$query->setParameters(array('name' => $name));