【发布时间】:2014-11-25 18:10:11
【问题描述】:
我正在使用 Doctrine QueryBuilder 创建一个查询,以通过电子邮件结尾选择一组用户。我有一系列电子邮件结尾,例如['@someservice.com', '@anotherservice.com' ].
我知道我可以通过WHERE IN 选择数组中的字符串:
$qb= $this
->createQueryBuilder('u')
->orderBy('u.id', 'asc')
->where('u.email IN (:emails)')
->setParameter('emails', [
'@someservice.com',
'@anotherservice.com'
]);
然而,此查询是针对字符串的确切出现,因此该查询当然会返回一个空结果集。
这就是为什么我想在数组上进行 LIKE 搜索,但要按照以下方式做一些事情:
$qb= $this
->createQueryBuilder('u')
->orderBy('u.id', 'asc')
->where('u.email LIKE IN (:emails)')
->setParameter('emails', [
'%@someservice.com',
'%@anotherservice.com'
]);
不幸的是失败了。是否有一些语法糖可以进行这样的查询,还是我必须使用一堆 orHaving 调用进行查询?
【问题讨论】:
-
LIKE IN不是公认的 SQL 语法 AFAIK,因此可能不受支持。这并不妨碍您使用辅助函数对其进行扩展,该辅助函数将其转换为this solution 之类的东西。HAVING始终是最后的手段,这完全适合WHERE。
标签: php arrays symfony doctrine-orm sql-like