我目前正在使用symfony2,doctrine 2.3和PostgreSQL9。我已经搜索了两个小时,以了解到底如何使用ILIKE
选择QueryBuilder
。
看来他们只有LIKE
。不过,就我而言,我正在搜索不区分大小写的代码。
到底是怎么做到的?
// -- this is the "like";
$search = 'user';
$query = $this->createQueryBuilder('users');
$query->where($query->expr()->like('users.username', $query->expr()->literal('%:username%')))->setParameter(':username', $search);
// -- this is where I get "[Syntax Error] line 0, col 86: Error: Expected =, <, <=, <>, >, >=, !=, got 'ILIKE'
$search = 'user';
$query = $this->createQueryBuilder('users');
$query->where('users.username ILIKE :username')->setParameter(':username', $search);
最佳答案
我不知道交响乐,但您可以替代
a ILIKE b
和
lower(a) LIKE lower(b)
您也可以尝试使用运算符
~~*
,它是ILIKE
的同义词它的运算符优先级略低,因此对于不需要
ILIKE
的串联字符串,您可能需要括号a ILIKE b || c
变成
a ~~* (b || c)
The manual about pattern matching, starting with
LIKE
/ ILIKE
.我认为这个人有同样的问题并得到了答案:
http://forum.symfony-project.org/viewtopic.php?f=23&t=40424
显然,您可以使用SQL供应商特定的功能来扩展Symfony2:
http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/cookbook/dql-user-defined-functions.html
我不是ORM和框架的忠实拥护者,而是为Postgres提供了丰富的功能,只是为了保持“可移植性”(这几乎是行不通的)。
关于postgresql - Symfony2学说-PostgreSQL的ILIKE子句?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13784261/