Каков наилучший способ создания более сложных запросов с использованием Doctrine в Symfony? Например, мне нужен запрос, который будет иметь 3 параметра, два AND и одно вложенное условие OR. В mySQL это будет выглядеть примерно так:
SELECT *
FROM schedule sched
WHERE shed.date = '01-01-2018' --first parameter
AND (sched.timefrom BETWEEN 8 AND 12 -- second and third parameter
OR sched.timeto BETWEEN 8 AND 12) -- also second and third
Я пытался разными способами, но ничего не работает:
$query = $em->createQuery(
'SELECT sched
FROM schedule sched
WHERE shed.date = :d
AND (sched.timefrom BETWEEN :tf AND :tt
OR sched.timeto BETWEEN :tf AND :tt)'
) ->setParameters(['d' => $date->format('Y-m-d'), 'tf' => $timefrom, 'tt' => $timeto]);
это не сработало, даже если я заменил МЕЖДУ на полное состояние, например:
(sched.timefrom > :tf AND sched.timefrom < :tt)
Использование QueryBuilder также не работало, и я попытался несколькими способами, это был последний (также пробовал с expressionBuilder, тоже не работал):
$repository = $this->getDoctrine()->getRepository(schedule::Class);
$query = $repository->createQueryBuilder('sched');
$query->where('sched.date = :date AND ((sched.timefrom > :timefrom AND sched.timefrom < :timeto) OR (shced.timeto > :timefrom AND sched.timeto < :timeto))')
->setParameter('date', $date->format('Y-m-d'))
->setParameter('tf', $timefrom)
->setParameter('tt', $timeto);
$query = $query->getQuery();
также:
$repository = $this->getDoctrine()->getRepository(schedule::Class);
$query = $repository->createQueryBuilder('sched');
$query->where('sched.date = :date')
->andWhere('sched.timefrom > :timefrom AND sched.timefrom < :timeto')
->orwhere('sched.timeto > :timefrom AND sched.timeto < :timeto')
->setParameter('date', $date->format('Y-m-d'))
->setParameter('tf', $timefrom)
->setParameter('tt', $timeto);
$query = $query->getQuery();
Как вы создаете запрос, который имеет много OR и AND, а также несколько скобок?
Спасибо!