Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Doctrine 2] Problem z NOT IN dla tablicy
swiezak
post 9.06.2017, 18:44:24
Post #1





Grupa: Zarejestrowani
Postów: 159
Pomógł: 0
Dołączył: 21.08.2011

Ostrzeżenie: (0%)
-----


Witajcie.
Mam mały problem ze zbudowaniem zapytania w oparciu o Doctrine 2 i Symfony 3.1, które zwróciłoby mi wszystkie zestawy z produktami oprócz tych, których składowe (nazwy produktów) znajdują się w tablicy.
Na tę chwilę zapytanie pobiera z bazy danych wszystkie zestawy, łącznie z produktami z poniższej tablicy.

Dane wejściowe z tablicy (nazwy produktów):
  1. Array ( [0] => Awokado [1] => Szpinak mrożony [3] => Kasza gryczana [4] => Kurczak smażony na oleju kokosowym )


Co ciekawe, jeśli zmienię warunek na:
  1. ->andWhere('p.name IN (:string)')
  2. ->setParameter('string', $array, \Doctrine\DBAL\Connection::PARAM_STR_ARRAY);

zapytanie pobiera tylko te zestawy, w których występują produkty zawarte w tablicy, więc musi być coś nie tak z warunkiem NOT IN.

Próbuję w poniższy sposób:
  1. public FUNCTION rowKits($calorieMeal, $tolerabilityCalorieMeal, $dietId, $kitKindId, $kitTypeId, $array) {
  2. $qb = $this->_em->createQueryBuilder()
  3. ->select('k')
  4. ->from('DietBackendBundle:Kit', 'k')
  5. ->where('k.calorie BETWEEN :minCalorie AND :maxCalorie')
  6. ->setParameter('minCalorie', $calorieMeal-$tolerabilityCalorieMeal)
  7. ->setParameter('maxCalorie', $calorieMeal+$tolerabilityCalorieMeal)
  8. ->join('k.diets', 'd')
  9. ->andWhere('d.id = :diet')
  10. ->setParameter(':diet', $dietId)
  11. ->join('k.kitKind', 'a')
  12. ->andWhere('a.id = :kitKind')
  13. ->setParameter(':kitKind', $kitKindId)
  14. ->join('k.kitTypes', 'b')
  15. ->andWhere('b.id = :kitType')
  16. ->setParameter(':kitType', $kitTypeId)
  17. ->join('k.products', 'p')
  18. ->andWhere('p.name NOT IN (:string)')
  19. ->setParameter('string', $array, \Doctrine\DBAL\Connection::PARAM_STR_ARRAY);
  20. //->setParameter('string', $array);
  21.  
  22. RETURN $qb->getQuery()->getResult();
  23. }


Jeśli szukam id produktów taka sama sytuacja - zwraca wszystkie zestawy.
Proszę Was Forumowicze o pomoc, być może popełniłem jakiś trywialny błąd.

Ten post edytował swiezak 9.06.2017, 18:59:57
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
Pyton_000
post 9.06.2017, 19:21:26
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


a tak:

Kod
->andWhere($qb->expr()->notIn('p.name', $array));

bez setParams

lub z params:

Kod
->andWhere($qb->expr()->notIn('p.name', ':arrayNotIn'))
->setParameter('arrayNotIn', $array, \Doctrine\DBAL\Connection::PARAM_STR_ARRAY)
;


Ten post edytował Pyton_000 9.06.2017, 19:23:02
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 23:29