Я работаю в Symfony 3.4 flex , мне нужно сделать один построитель запросов, например, так:
Все носители с " опубликовано " на True, а носители равны TYPE OF : type AND ((condition 1) OR (condition 2) OR (condition 3))
с помощью построителя запросов доктрины Symfony.Эти 2 условия уже выполнены (опубликовано и экземпляр: instance):
$queryBuilder = $this->createQueryBuilder('m')
->chere('m.published = :published')
->andWhere('m INSTANCE OF :instance');
/*
WHERE m.published = true AND m INSTANCE OF :instance
AND (
// ('m.startDate <= :today AND m.endDate >= :today')
// OR ('m.startDate IS NULL AND m.endDate >= :today')
// OR ('m.startDate IS NULL AND m.endDate IS NULL')
// OR ('m.startDate <= :today AND m.endDate IS NULL')
*/
Когда я пытаюсь что-то вроде:
$queryBuilder->andWhere($queryBuilder->expr()->andX(
$queryBuilder->expr()->lte('m.startDate', ':today'),
$queryBuilder->expr()->gte('m.endDate', ':today'))
);
Но это не работает, оно возвращает что-то вроде:
WHERE (
(m.published = 1 AND m.type IN (:type)) // I already needed this in all cond
AND m.start_date <= :today AND m.end_date >= :today // cond 1
)
OR (m.start_date IS NULL :today AND m.end_date IS NULL) // cond 2
OR ... // cond 3
Так что мое состояние с ((m.published = 1 AND m.type IN (:type)))
должно быть при любых условиях, а не только первым
У вас есть идеи?
Спасибо.