#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)')