Php 将新对象添加到图元上下

Php 将新对象添加到图元上下,php,symfony,doctrine,Php,Symfony,Doctrine,我试图找到一种方法,在访问帖子实体时,可以产生更少的请求,并且能够从该实体中获取上一篇和下一篇帖子,现在我在与Twig相同的视图中所做的是通过以下方式获取它 {% set next = next(post) %} {% set prev = prev(post) %} 小枝延伸 public function next($post){ $nextPost = $this->em->getRepository('App:Post')->createQueryB

我试图找到一种方法,在访问帖子实体时,可以产生更少的请求,并且能够从该实体中获取上一篇和下一篇帖子,现在我在与Twig相同的视图中所做的是通过以下方式获取它

{% set next = next(post) %}
{% set prev = prev(post) %}
小枝延伸

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;
    }

我能想到的唯一方法是在实体中存储对上一个/下一个对象的引用。然后可以使用连接来获取它们

您还可以编写一个复杂的查询,加载当前实体,并将这两个查询作为子查询执行,或使用UNION同时获取所有3个查询,但我认为这将变得非常笨拙


不过,我不会担心这3个问题。将它合并到一个大查询中会使它更难阅读和调试,我怀疑性能的提高是否会明显。除非您当前注意到这些查询对性能的影响,否则优化它只会浪费您可以花在其他事情上的时间。您可以进行一些性能分析,即通过调查探查器工具栏中“性能”和“查询”选项卡中的瓶颈。

我能想到的唯一方法是在实体中存储对上一个/下一个对象的引用。然后可以使用连接来获取它们

您还可以编写一个复杂的查询,加载当前实体,并将这两个查询作为子查询执行,或使用UNION同时获取所有3个查询,但我认为这将变得非常笨拙

不过,我不会担心这3个问题。将它合并到一个大查询中会使它更难阅读和调试,我怀疑性能的提高是否会明显。除非您当前注意到这些查询对性能的影响,否则优化它只会浪费您可以花在其他事情上的时间。您可以进行一些性能分析,即通过调查探查器工具栏中“性能”和“查询”选项卡中的瓶颈

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