Найти запись по 2 параметрам, один из которых является массивом - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть стол Коллекция:

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

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

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

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

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

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

->andWhere('p.order in (:ordersCollection)')
0 голосов
/ 15 апреля 2019

попробуйте, как показано ниже, используя существует

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
          )
...