Добавить новые объекты ранее и рядом с Entity Post - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь найти способ, который мог бы выдавать меньше запроса при посещении юридического лица и иметь возможность получить предыдущее и следующее сообщение от этого юридического лица , прямо сейчас, что я делаю в том же виде с Twig, получаю его следующим образом.

{% set next = next(post) %}
{% set prev = prev(post) %}

Расширение Twig

public function next($post){

        $nextPost = $this->em->getRepository('App:Post')->createQueryBuilder('b')
            ->where('b.id > :id')->setParameter('id', $post->getId())
            ->andWhere('b.visible = :visible')->setParameter('visible', true)
            ->orderBy("b.id","asc")
            ->setMaxResults(1)
            ->getQuery()
            ->getOneOrNullResult();


        return $nextPost;
    }
    public function prev($post){

        $prevPost = $this->em->getRepository('App:Post')->createQueryBuilder('b')
            ->where('b.id < :id')->setParameter('id', $post->getId())
            ->andWhere('b.visible = :visible')->setParameter('visible', true)
            ->orderBy("b.id","desc")
            ->setMaxResults(1)
            ->getQuery()
            ->getOneOrNullResult();


        return $prevPost;
    }

Был бы какой-то способ получить егос меньшим количеством запросов mysql и добавлением его к объекту Post таким конкретным способом.

{{post.prev.title}}
{{post.next.title}}

1 Ответ

0 голосов
/ 16 ноября 2018

Единственный способ, которым я могу думать, - это сохранить ссылку на предыдущий / следующий объект в сущности.Затем вы можете использовать соединения для их извлечения.

Вы также можете написать сложный запрос, который загружает вашу текущую сущность, а также выполняет оба ваших запроса как подзапросы или с помощью UNION, чтобы получить все 3 из них одновременно, но я думаю, что это станет довольно громоздким.

Я бы не стал беспокоиться об этих 3 запросах.Объединение его в один большой запрос усложнит чтение и отладку, и я сомневаюсь, что прирост производительности будет даже заметен.Если в настоящее время вы не заметите влияние этих запросов на производительность, его оптимизация просто потратит время, которое вы могли бы потратить на что-то другое.Вы можете провести некоторый анализ производительности, например, исследуя узкие места на вкладках производительности и запросов на панели инструментов профилировщика.

...