学说LIKE不区分大小写

时间:2010-11-08 20:56:22

标签: doctrine

是否可以使用Doctrine不区分大小写进行搜索?

5 个答案:

答案 0 :(得分:24)

这主要取决于您的数据库服务器。与MySQL的LIKE不区分大小写,与PostgreSQL类似,区分大小写。但你可以用这样的东西来帮助自己:

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

答案 1 :(得分:4)

此外,您可以尝试:

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

重要提示:使用strtolower()将包含特殊字符的字符串转换为小写字母后,特殊字符显示不正确。

答案 2 :(得分:0)

你可以做的其他事情是:

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

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

问候。

答案 3 :(得分:0)

执行此操作的最佳方法是使用canonized用户名列,在该列中,您可以存储用户名列的小写版本以及您要执行的任何其他典型化过程,并搜索和索引该列而不是用户名列,然后就这样做

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

这样你可以使用索引和所有这些。

答案 4 :(得分:-2)

$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).'%');