Doctrine 2 - jak zrobić if'a w zapytaniu select

0

Witam,

Korzystam od jakiegoś czasu z doctrine 2 i mam zapytanie zrobione ale where zalezy od tego co przyjdzie do funkcji mniej więcej wygląda to tak:


public function getMaxRankCategory($parentCategory)
    {        
        $query = $this->getEntityManager()->createQueryBuilder()
               ->addSelect('MAX(category.rank) AS maxRank')
               ->from('ProductCategory', 'category')
               ->where(function ($q) use ($parentCategory) {
                   if(is_null($parentCategory)) {
                       $q->where('category.parentCategory is NULL');
                   } else {
                       $q->where('category.parentCategory = :parentCategory')
                             ->setParameter('parentCategory', $parentCategory);
                   }
               })
               ->getQuery();
                
        $result = $query->getSingleResult();
        return $result['maxRank'];
    }

i zwracany jest błąd "Expression of type 'Closure' not allowed in this context." Nie chce tego robić że jeśli NULL to takie zapytanie a w przeciwnym razie inne. proszę o pomoc co źle robię i jak takie coś zrealizować w Doctrine 2

1
$query = $this->getEntityManager()->createQueryBuilder()
    ->addSelect('MAX(category.rank) AS maxRank')
    ->from('ProductCategory', 'category');

if(is_null($parentCategory)) {
    $query ->where('category.parentCategory is NULL');
} else {
    $query ->where('category.parentCategory = :parentCategory')
        ->setParameter('parentCategory', $parentCategory);
}
0

Jeżeli setParameter nie będzie krzyczeć, jeżeli string nie będzie zawierać poszukiwanej nazwy, to można też tak:

$query = $this->getEntityManager()->createQueryBuilder()
    ->addSelect('MAX(category.rank) AS maxRank')
    ->from('ProductCategory', 'category')
    ->where(is_null($parentCategory) ? 'category.parentCategory is NULL' : 'category.parentCategory = :parentCategory')
        ->setParameter('parentCategory', $parentCategory);
0
dzek69 napisał(a):

Jeżeli setParameter nie będzie krzyczeć, jeżeli string nie będzie zawierać poszukiwanej nazwy, to można też tak:

$query = $this->getEntityManager()->createQueryBuilder()
    ->addSelect('MAX(category.rank) AS maxRank')
    ->from('ProductCategory', 'category')
    ->where(is_null($parentCategory) ? 'category.parentCategory is NULL' : 'category.parentCategory = :parentCategory')
        ->setParameter('parentCategory', $parentCategory);

Jeśli jest NULL krzyczy setParameter wiec tak nie może być :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1