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

时间:2021-02-03 12:12:52

标签: symfony doctrine-orm doctrine doctrine-query

我尝试使用 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'

2 个答案:

答案 0 :(得分:0)

在 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

答案 1 :(得分:0)

你可以试试:

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