Я использую Symfony 3.4. У меня проблема с запросом:
$qb = $this->createQueryBuilder('o')
->leftJoin('o.prices', 'p', 'WITH', 'p.dateEnd >= :now OR p.dateEnd IS NULL')
->setParameter('now', $nowDate);
return $qb->getQuery()->getResult();
Итак, у меня есть сущность Offer o
OneToMany Price p
.
Мне нужно с этим запросом получить предложения и цену, только если условие действительно: p.dateEnd >= :now OR p.dateEnd IS NULL
У меня в моей базе данных 2 цены с dateEnd = null и dateEnd = 2018-01-01 00:00:00, поэтому я ожидаю получить только цену с dateEnd = null, но у меня есть все цены в моем getResult()...
Зачем?
Как я могу получить только определенную цену, а не все цены за каждое предложение?
Спасибо!
Изменение: Это мой sql:
SELECT o0_.id AS id_0
FROM offer o0_
LEFT JOIN price p1_
ON o0_.id = p1_.offerId
AND (p1_.date_end >= ? OR p1_.date_end IS NULL)
Ответ на этот вопрос - добавить ->select('o', 'p')
к запросу.. Не знаю, почему!
->addSelect('p')
, этого достаточно (корневой объект выбран по умолчанию).
Поскольку это левое соединение, я думаю, вы могли бы написать свой запрос следующим образом:
$qb = $this->createQueryBuilder('o')
->leftJoin('o.prices', 'p')
->where('p.dateEnd >= :now OR p.dateEnd IS NULL')
->setParameter('now', $nowDate);
return $qb->getQuery()->getResult();