我有一个名为$colorMaster
$colorMaster->findOneBy(array("name"=>'RED');
它不会返回任何记录,即使在我的数据库中有记录值为"红色"。
当我尝试使用相同的代码和红色'
时$colorMaster->findOneBy(array("name"=>'Red');
它返回值。
我们有什么方法可以从中获取不区分大小写的记录
symfony findOneBy();
因此,它可以使用价值" RED"还
答案 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));