Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Doctrine 类条令不区分大小写_Doctrine - Fatal编程技术网

Doctrine 类条令不区分大小写

Doctrine 类条令不区分大小写,doctrine,Doctrine,是否可以使用区分大小写的原则进行搜索?这主要取决于您的数据库服务器。MySQL的LIKE不区分大小写,PostgreSQL的LIKE区分大小写。但是你可以自己做这样的事情: $pattern = strtolower('HEllO WorlD'); $q = Doctrine_Query::create() ->select('u.username') ->from('User u') ->where("LOWER(u.username

是否可以使用区分大小写的原则进行搜索?

这主要取决于您的数据库服务器。MySQL的LIKE不区分大小写,PostgreSQL的LIKE区分大小写。但是你可以自己做这样的事情:

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

你可以做的另一件事是:

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

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

此外,您可以尝试:

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

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

最好的方法是使用规范化的用户名列,在该列中,您可以存储用户名列的小写版本以及您想要执行的任何其他规范化过程,并搜索和索引该列而不是用户名列,然后只需执行以下操作即可

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

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

那么用户名列上的索引呢?你可以防止PHP
strtolower
因使用
mb\u strtolower
函数而中断。当然,PHP需要包含mbstring模块才能工作。尽管如此,我不知道使用
LOWER
数据库是否更快,或者PHP是否在这一点上更快。