В моем проекте мне нужно получить 5 объектов (событий) до и после моего текущего объекта (currentEvent).
Я нашел решение, но оно тяжелое и требует 2 запроса и операции сборки. Есть ли способ сделать то же самое только с одним запросом?
вы можете найти здесь код моего текущего репозитория (который на самом деле хорошо работает)
/**
* @return array the list of x events around the currentEvent
*/
public function findAround(int $nbEvents, Event $currentEvent):array
{
$qb1 = $this->createQueryBuilder('ev');
$qb1->select('ev')
->where('ev.start < :date')
->setParameter('date', $currentEvent->getStart())
->orderBy('ev.start', 'DESC')
->setFirstResult(1)
->setMaxResults($nbEvents);
$qb2 = $this->createQueryBuilder('ev');
$qb2->select('ev')
->where('ev.start > :date')
->setParameter('date', $currentEvent->getStart())
->orderBy('ev.start', 'ASC')
->setFirstResult(1)
->setMaxResults($nbEvents);
$before = $qb1->getQuery()->getResult();
$after = $qb2->getQuery()->getResult();
$events = [];
for ($i=$nbEvents-1; $i >= 0; $i--)
array_push($events, $before[$i]);
array_push($events, $currentEvent);
for ($i=0; $i < $nbEvents; $i++)
array_push($events, $after[$i]);
return $events;
}