qnixdev
@qnixdev
Junior PHP Developer

Как сделать выемку данных из Doctrine, если один из параметров может быть null?

Возможно спрашиваю что-то для всех понятное, так что сорри.

Есть таблица купонов со след. связями:
Coupon ManyToMany Country
Coupon ManyToOne Category


Страна может быть только одна, а вот категорий несколько.

Делаю выборку:
public function getCoupons(
    ?array $category,
    ?string $country
): array {
    return $this->slugQueryBuilder()
        ->innerJoin('c.countries', 'cc', 'WITH', 'cc.name = :country')
        ->innerJoin('c.category', 'category')
        ->where('c.category IN (:category)')
        ->setParameters([
            'country' => $country,
            'category' => $category,
        ])
        ->orderBy('c.createdAt', 'DESC')
        ->getQuery()
        ->getResult()
    ;
}


Все работает, но мне необходимо что бы запрос продолжал работать, если параметр не передан, один или оба.

Как это возможно реализовать без дополнительных методов и условных if?
  • Вопрос задан
  • 35 просмотров
Решения вопроса 1
qnixdev
@qnixdev Автор вопроса
Junior PHP Developer
Сделал вот так, может кому будет полезно.

public function getCoupons(
    ?array $category,
    ?string $country
): array {
    $qb = $this->slugQueryBuilder()
        ->orderBy('c.createdAt', 'DESC')
    ;

    if (
        isset($country)
        && $country !== ''
    ) {
        $qb
            ->innerJoin('c.countries', 'cc', 'WITH', 'cc.name = :country')
            ->setParameter('country', $country)
        ;
    }

    if (!empty($category)) {
        $qb
            ->innerJoin('c.category', 'category')
            ->andWhere('c.category IN (:category)')
            ->setParameter('category', $category)
        ;
    }

    return $qb->getQuery()->getResult();
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы