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):
Array ( [0] => Awokado [1] => Szpinak mrożony [3] => Kasza gryczana [4] => Kurczak smażony na oleju kokosowym )
Co ciekawe, jeśli zmienię warunek na:
->andWhere('p.name IN (:string)') ->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:
public FUNCTION rowKits($calorieMeal, $tolerabilityCalorieMeal, $dietId, $kitKindId, $kitTypeId, $array) { $qb = $this->_em->createQueryBuilder() ->select('k') ->from('DietBackendBundle:Kit', 'k') ->where('k.calorie BETWEEN :minCalorie AND :maxCalorie') ->setParameter('minCalorie', $calorieMeal-$tolerabilityCalorieMeal) ->setParameter('maxCalorie', $calorieMeal+$tolerabilityCalorieMeal) ->join('k.diets', 'd') ->andWhere('d.id = :diet') ->setParameter(':diet', $dietId) ->join('k.kitKind', 'a') ->andWhere('a.id = :kitKind') ->setParameter(':kitKind', $kitKindId) ->join('k.kitTypes', 'b') ->andWhere('b.id = :kitType') ->setParameter(':kitType', $kitTypeId) ->join('k.products', 'p') ->andWhere('p.name NOT IN (:string)') ->setParameter('string', $array, \Doctrine\DBAL\Connection::PARAM_STR_ARRAY); //->setParameter('string', $array); RETURN $qb->getQuery()->getResult(); }
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.