通过2个参数查找记录,其中一个是数组

时间:2019-04-15 10:57:37

标签: sql doctrine dql

我有表Collection:

id  orderId   productId
1     201        1
2     202        2
3     205        3
4     206        1
5     207        1
6     208        1
7     311        2

OrderId和ProductId是与Collection表的关系。 而且我需要检查是否存在记录,例如。 productId = 1 AND orderId [205,206,207,208]。

我应该如何建立查询以查找所需内容?

orderId的数组不是静态的,它是动态的,取决于情况,可以具有不同数量的元素。我试图使它像这样:

$ordersCollection = [various id objects of orders ];
$productId = just productId

createQueryBuilder('p')
        ->andWhere('p.product = :productId')
        ->andWhere('p.order in :ordersCollection')
        ->setParameters(['productId' => $productId, 'ordersCollection' => $ordersCollection])
        ->getQuery()
        ->getResult();

但这不起作用

2 个答案:

答案 0 :(得分:0)

尝试通过以下方式使用存在

select t1.* table t1
where t1.productId=1
and exists( select 1 from table t2 where t1.productId=t2.productId
                 and orderId in(205, 206, 207, 208)
                   having count( distinct orderId)=4
          )

答案 1 :(得分:0)

编辑。好的,我忘了在

中添加括号
->andWhere('p.order in :ordersCollection')

应该是

->andWhere('p.order in (:ordersCollection)')