Найти запись по 2 параметрам, которая является массивом

#sql #doctrine #dql

#sql #доктрина #dql

Вопрос:

у меня есть коллекция таблиц:

 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 — это отношения к таблице коллекции.
И мне нужно проверить, существует ли запись, где, например. ProductID = 1 И 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();
  

Но это не работает

Ответ №1:

попробуйте, как показано ниже, используя 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
          )
  

Комментарии:

1. Спасибо за ответ, но он не работает, когда я «перевел» его в запрос DQL. Я отредактировал свой пост, чтобы добавить больше деталей

Ответ №2:

Редактировать. Хорошо, я забыл добавить скобку в

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

это должно быть

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