微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决带有 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. '%');

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。