Doctrine Query Builder:多个参数化字段,例如(a.field1,a.field2)IN((1,1),(2,2))

时间:2018-05-29 21:30:46

标签: php doctrine-orm doctrine

如何构建查询以便我可以在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。

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可以更好地利用密钥。