2014-09-23 12 views
5

Mam jedno repozytorium o nazwie $colorMasterCase wyszukiwania używając niewrażliwy findoneby()

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

Zwraca rekordy, chociaż nie w mojej bazie danych znajduje zapisy o wartości „czerwony”.

gdy próbuję użyć tego samego kodu o wartości 'Red'

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

zwraca wartość.

Czy istnieje jakiś sposób, dzięki któremu możemy uzyskać wielkość liter ma znaczenie rekordy od symfony findOneBy(); tak, że może dać rezultat w oparciu o wartość „czerwony” też.

+0

została tu odpowiedzi http://stackoverflow.com/questions/17458216/symfony2-and-doctrine-how-to-use-findoneby-method-taking-capitals-into-account – faisalbhagat

+1

Która baza danych, której używasz? – Cerad

+0

Używam bazy danych PostgreSQL –

Odpowiedz

10

Problem nie jest na poziomie Symfony, ale na poziomie bazy danych. Niektóre z nich uwzględniają wielkość liter, a inne nie. Twoja sprawa rozróżnia wielkie i małe litery. Aby uzyskać wyniki, bez względu na przypadek, spróbuj wykonać następujące czynności:

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

Przyjęta odpowiedź nie zadziałała, prawdopodobnie z powodu niewrażliwego na wielkość znaków zestawu znaków.

$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)); 
Powiązane problemy