Doctrine查询+ LIKE表达式

时间:2012-06-06 14:56:27

标签: doctrine-orm sql-like dql

我在使用LIKE Expression创建一个Doctrine查询时遇到问题:

QUERY:

$dql    = "SELECT u FROM Users u JOIN u.group g WHERE g.name LIKE lower('ADMIN')";
$query  = $em->createQuery($dql);
$result = $query->getResult();

错误:

QueryException: [Syntax Error] line 0, col 147: Error: Expected Doctrine\ORM\Query\Lexer::T_STRING, got 'lower'

LOWER只是一个例子,我需要在LIKE中使用其他功能 例如,EXPRESSION是无关的......

如何更改Like Expression以支持双方的功能?

示例:LOWER(unaccent(u.login)) LIKE LOWER(unaccent('ADMIN'))

2 个答案:

答案 0 :(得分:3)

类似的字符串需要有%符号。如果你想要一些以ADMIN开头的东西,那么如果你想要一些以ADMIN结尾的东西,你会写%ADMIN,最后如果你想让它包含ADMIN,那么你就会编写ADMIN%,那么它就是%ADMIN%。

也许要返回一个字符串,你可以使用doctrine的CONCAT函数,或者你可以通过PHP来实现。

答案 1 :(得分:0)

我使用QueryBuilder进行了测试,似乎没有解决方案。第二个参数不会有函数,所以我建议切换参数:

$dql    = "SELECT u FROM Users u JOIN u.group g WHERE UPPER(g.name) LIKE 'ADMIN'";