2010-11-08 28 views

Respuesta

21

Esto depende principalmente de su servidor de base de datos. A LIKE con MySQL no distingue entre mayúsculas y minúsculas y PostgreSQL distingue entre mayúsculas y minúsculas. Pero usted puede ayudarse a sí mismo con algo como esto:

$pattern = strtolower('HEllO WorlD'); 
$q = Doctrine_Query::create() 
     ->select('u.username') 
     ->from('User u') 
     ->where("LOWER(u.username) LIKE ?", $pattern); 
+0

¿Y qué hay de los índices en la columna de nombre de usuario? – Jekis

0

Otra cosa que puede hacer es:

$qb->andWhere($qb->expr()->like('lower(o.name)', ':name')); 

$qb->setParameter('name', '%'. strtolower($search) . '%'); 

Saludos.

3

Además, puede intentar:

$queryBuilder->where('LOWER(b.title) LIKE LOWER(:query)') 
     ->setParameter('query', '%' . $query . '%'); 

Importante: Después de convertir una cadena que contiene caracteres especiales a minúsculas con strtolower(), los caracteres especiales no aparecen correcta.

0

La mejor manera de hacerlo es tener una columna de nombre de usuario canonizado, en esa columna puede almacenar la versión en minúscula de la columna de nombre de usuario y cualquier otro proceso de canonización que desee hacer y buscar e indexar esa columna en lugar del nombre de usuario columna, luego solo haga

->where("u.canonic_username) LIKE ?", $pattern); 

De esta forma puede usar índices y todo eso.

-1
$q = Doctrine_Query::create() 
$q->select('t') 
    ->from('database_table t') 
    ->where($q->expr()->like('t.search_field', ':search_text')) 
    ->setParameter('search_text', '%'.strtolower($searchText).'%'); 
+0

Esta respuesta ha sido marcada como de baja calidad. ¿Podría explicar su código y por qué soluciona el problema? – AJFarmar

Cuestiones relacionadas