0

我使用学说查询生成器来构建我的查询。

$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,我也会收到相同的错误消息。

4

2 回答 2

0

您必须使用$qb->expr()->lower('u.email')$qb->expr()->lower(':search')。要创建“LIKE”,请将这些作为参数传递给$qb->expr()->like().

虽然似乎没有不重音的方法,但也许有一种方法可以自定义它。让我知道进展如何。

编辑:

查看 lower() 的代码,您似乎可以使用任何您想要的函数,如下所示:

new Expr\Func('LOWER', array($x));
于 2013-11-07T22:00:36.710 回答
-1

默认情况下,我很确定你不能这样做。
lower_unaccent 不是标准 SQL,据我所知,Doctrine 不支持。

您可以做的是使用用户定义的函数扩展 DQL,这将做任何您想做的事情。实施起来并不难。这是一些文档:

http://docs.doctrine-project.org/en/2.0.x/cookbook/dql-user-defined-functions.html

http://docs.doctrine-project.org/en/2.0.x/reference/dql-doctrine-query-language.html#adding-your-own-functions-to-the-dql-language

于 2013-01-30T15:21:44.983 回答