带有 in 表达式的 Doctrine 查询构建器

问题描述

我尝试使用 in 表达式获取在三个不同属性中拥有邮件的所有用户

$qb = $this->createqueryBuilder('i');
$qb->where(':email in (i.firstMail,i.secondtMail,i.thirdtMail)');

   

我在 getResult 中遇到了这个错误

[Syntax Error] line 0,col 61: Error: Expected Doctrine\\ORM\\Query\\Lexer::T_OPEN_PARENTHESIS,got 'i'

解决方法

在 DQL 中,词法分析器期望 IN() 函数的内容是子选择或逗号分隔的文字列表。 https://github.com/doctrine/orm/blob/f92c3dba324923729373b1fdfc324b77e5cc5900/lib/Doctrine/ORM/Query/Parser.php#L3102

要获得您想要的内容,您必须创建多个 where 条件或聚合子选择中的其他 3 个字段。

此外,我建议对复杂表达式使用表达式构建器:https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/query-builder.html#the-expr-class

,

你可以试试:

$qb = $this->createQueryBuilder('i');
$qb->andWhere('i.firstMail LIKE :email OR i.secondtMail LIKE :email OR i.thirdtMail LIKE :email')
   ->setParameter('email','%'. $email. '%');