Подтвердить что ты не робот

Doctrine LIKE не чувствителен к регистру

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

4b9b3361

Ответ 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).'%');