我使用doctrine查询构建器来构建我的查询。
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select(array('u'))->from('Account', 'a');
-- problem here
$qb->where('lower_unaccent(u.email) LIKE :search');
$qb->setParameter('search', $search['search'] . '%');
这很好用,但我还想将lower_unaccent函数应用于搜索参数。
有没有办法在查询构建器中执行此操作?
因为当我LOWER_UNACCENT(u.email) LIKE LOWER_UNACCENT(:search)
时,我收到以下错误:
Error: Expected Doctrine\ORM\Query\Lexer::T_STRING, got 'LOWER_UNACCENT'
即使我将LOWER_UNACCENT更改为LOWER,也会收到相同的错误消息。
答案 0 :(得分:0)
您必须使用$qb->expr()->lower('u.email')
和$qb->expr()->lower(':search')
。要创建“LIKE”,请将这些作为参数传递给$qb->expr()->like()
。
虽然似乎没有一种不显眼的方法,但也许有一种方法可以自定义它。让我知道它是怎么回事。
编辑:
查看lower()的代码,看起来你可以使用你想要的任何函数:
new Expr\Func('LOWER', array($x));
答案 1 :(得分:-1)
默认情况下,我很确定你无法做到这一点 lower_unaccent不是标准SQL,据我所见,Doctrine不支持。
您可以做的是使用用户定义的函数扩展DQL,这将执行您想要的任何操作。实施起来并不难。这是一些文档:
http://docs.doctrine-project.org/en/2.0.x/cookbook/dql-user-defined-functions.html