Doctrine query + LIKE expression

2019-07-23 07:46发布

I have problems to create a Doctrine Query with LIKE Expression:

QUERY:

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

ERROR:

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

LOWER was just an example, I need to use other functions in LIKE EXPRESSION, for example, unnacent...

How can I change Like Expression to support function on both sides?

Example: LOWER(unaccent(u.login)) LIKE LOWER(unaccent('ADMIN'))

2条回答
再贱就再见
2楼-- · 2019-07-23 08:22

I tested this with QueryBuilder and there doesn't seem to be a solution. The second parameter will not take a function, so I would suggest switching the parameters around:

$dql    = "SELECT u FROM Users u JOIN u.group g WHERE UPPER(g.name) LIKE 'ADMIN'";
查看更多
手持菜刀,她持情操
3楼-- · 2019-07-23 08:29

The like string needs to have % signs. If you want something that starts with ADMIN then you would write ADMIN% if you want something that ends with ADMIN you would write %ADMIN and finally if you want it to contain ADMIN then it would be %ADMIN%.

Maybe to return a string you can use the CONCAT function of doctrine or you can do it via PHP.

查看更多
登录 后发表回答