我目前正在使用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/

10-12 01:25