извлекать объекты вокруг известного объекта - PullRequest
0 голосов
/ 18 марта 2019

В моем проекте мне нужно получить 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;
    }
...