Доктрина, как без учета регистра - PullRequest
20 голосов
/ 08 ноября 2010

можно ли сделать поиск с Doctrine нечувствительным к регистру?

Ответы [ 5 ]

24 голосов
/ 09 ноября 2010

Это зависит главным образом от вашего сервера баз данных.LIKE с MySQL чувствителен к регистру, как с PostgreSQL чувствителен к регистру.Но вы можете помочь себе с чем-то вроде этого:

$pattern = strtolower('HEllO WorlD');
$q = Doctrine_Query::create()
       ->select('u.username')
       ->from('User u')
       ->where("LOWER(u.username) LIKE ?", $pattern);
4 голосов
/ 08 февраля 2016

Также вы можете попробовать:

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

Важное замечание: После преобразования строки, содержащей специальные символы, в нижний регистр с помощью strtolower (), специальные символы выглядят некорректно.

0 голосов
/ 25 января 2017
$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 голосов
/ 05 июля 2016

Лучший способ сделать это - иметь столбец канонизированного имени пользователя, в этом столбце вы можете хранить строчную версию столбца имени пользователя и любой другой процесс канонизации, который вы хотите выполнить, а также искать и индексировать этот столбец вместо столбца имени пользователя.затем просто выполните

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

Таким образом, вы можете использовать индексы и все такое.

0 голосов
/ 22 января 2016

Другое, что вы можете сделать, это:

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

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

Привет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...