我在使用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'))
答案 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'";