我有桌子收藏:
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();
但它不起作用
通过使用exists尝试如下
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
)
编辑。好的,我忘了添加括号
->andWhere('p.order in :ordersCollection')
它应该是
->andWhere('p.order in (:ordersCollection)')