如何构建查询以便我可以在QueryBuilder中参数化多个字段,如下所示:
$qb->andWhere('(a.field1, a.field2) IN ((1, 1), (2, 2))');
以上示例给出了一个错误:
Doctrine\ORM\Query\QueryException : [Syntax Error] line 0, col 84: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got ','
我使用的是Doctrine 2.6.1。
答案 0 :(得分:0)
认为关于如何使用WHERE IN
的主要部分已被多次回答。
尝试将两个标准组合起来是行不通的。这种SQL永远不会起作用的方式相同:
select * from users where (id, email) IN ((1, 2), ('foo@gmail.com', 'bar@gmail.com'));
你会把它写成
select * from users where id IN(1,2) AND email IN('foo@gmail.com', 'bar@gmail.com');
从2.5开始,我相信你会想要:
$qb->andWhere('a.field1 IN (:fieldOneValues)')
->andWhere('a.field2 IN (:fieldTwoValues)')
->setParameter('fieldOneValues', $fieldOneValues)
->setParameter('fieldTwoValues', $fieldTwoValues);
<强>更新强>
现在我明白了。我分享的SQL显示我不理解该语法。您要测试多少个值?你能接近吗?
(a.field1 = 1 AND a.field2 = 1) OR (a.field1 = 2 AND a.field2 = 2)
对查询执行explain
实际上,使用此方法,MySQL可以更好地利用密钥。