Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Doctrine 2] Problem z NOT IN dla tablicy
Forum PHP.pl > Forum > Bazy danych > MySQL
swiezak
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.
Pyton_000
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)
;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.