è possibile effettuare una ricerca con Doctrine senza distinzione tra maiuscole e minuscole?Doctrine LIKE senza distinzione tra maiuscole e minuscole
risposta
Dipende principalmente dal server di database. Un LIKE con MySQL è case insensitive come PostgreSQL è case sensitive. Ma si può aiutare se stessi con qualcosa di simile:
$pattern = strtolower('HEllO WorlD');
$q = Doctrine_Query::create()
->select('u.username')
->from('User u')
->where("LOWER(u.username) LIKE ?", $pattern);
Altra cosa che puoi fare è:
$qb->andWhere($qb->expr()->like('lower(o.name)', ':name'));
$qb->setParameter('name', '%'. strtolower($search) . '%');
saluti.
Inoltre, si può provare:
$queryBuilder->where('LOWER(b.title) LIKE LOWER(:query)')
->setParameter('query', '%' . $query . '%');
Importante: Dopo la conversione di una stringa che contiene i caratteri speciali in minuscolo con strtolower(), i caratteri speciali non appaiono corrette.
Il modo migliore per fare questo è avere una colonna nome utente canonizzata, in quella colonna è possibile memorizzare la versione in minuscolo della colonna nome utente e qualsiasi altro processo di canonizzazione che si desidera fare e cercare e indicizzare quella colonna al posto del nome utente colonna, quindi basta fare
->where("u.canonic_username) LIKE ?", $pattern);
In questo modo è possibile utilizzare gli indici e tutto il resto.
$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).'%');
Questa risposta è stata contrassegnata come di bassa qualità. Potresti spiegare il tuo codice e perché risolve il problema? – AJFarmar
E che dire degli indici sulla colonna del nome utente? – Jekis