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

问题描述 投票:0回答:2

我有桌子收藏:

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();

但它不起作用

sql doctrine dql
2个回答
0
投票

通过使用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
          )

0
投票

编辑。好的,我忘了添加括号

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

它应该是

->andWhere('p.order in (:ordersCollection)')
© www.soinside.com 2019 - 2024. All rights reserved.