Можно ли сделать поиск с недопустимым регистром Doctrine?
Doctrine LIKE не чувствителен к регистру
Ответ 1
В основном это зависит от вашего сервера базы данных. LIKE с MySQL нечувствителен к регистру, как и PostgreSQL, чувствителен к регистру. Но вы можете помочь себе чем-то вроде этого:
$pattern = strtolower('HEllO WorlD');
$q = Doctrine_Query::create()
->select('u.username')
->from('User u')
->where("LOWER(u.username) LIKE ?", $pattern);
Ответ 2
Кроме того, вы можете попробовать:
$queryBuilder->where('LOWER(b.title) LIKE LOWER(:query)')
->setParameter('query', '%' . $query . '%');
Важно: После преобразования строки, содержащей специальные символы в нижний регистр с помощью strtolower(), специальные символы не отображаются правильно.
Ответ 3
Другое, что вы можете сделать:
$qb->andWhere($qb->expr()->like('lower(o.name)', ':name'));
$qb->setParameter('name', '%'. strtolower($search) . '%');
С уважением.
Ответ 4
Лучший способ сделать это - иметь канонизированный столбец имени пользователя, в этом столбце вы можете сохранить строчную версию столбца имени пользователя и любой другой процесс канонизации, который вы хотите сделать, и выполнить поиск и индексировать этот столбец вместо столбца имени пользователя, то просто сделайте
->where("u.canonic_username) LIKE ?", $pattern);
Таким образом, вы можете использовать индексы и все это.
Ответ 5
$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).'%');