2014-09-23 18 views
5

Ho un repository chiamato $colorMasterCaso ricerca utilizzando insensitive findOneBy()

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

E non restituisce alcun record, anche se nel mio database v'è record con valore "Rosso".

quando provo ad usare lo stesso codice con valore 'Red'

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

restituisce il valore.

C'è un modo con il quale possiamo ottenere casistica insensitive da symfony findOneBy(); in modo che possa dare risultato utilizzando il valore "ROSSO" anche.

+0

è stato risposto qui http://stackoverflow.com/questions/17458216/symfony2-and-doctrine-how-to-use-findoneby-method-taking-capitals-into-account – faisalbhagat

+1

Quale database stai usando? – Cerad

+0

Sto usando il database postgres –

risposta

10

Il problema non è a livello di Symfony ma a livello di database. Alcuni di essi sono case sensitive e altri no. A quanto pare è case sensitive. Per ottenere risultati, non importa caso, prova a seguire:

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

La risposta accettata non ha funzionato per me, presumibilmente a causa di set di caratteri caso insensibile.

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