我有表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();
但这不起作用
答案 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)')