Php 将新对象添加到图元上下
我试图找到一种方法,在访问帖子实体时,可以产生更少的请求,并且能够从该实体中获取上一篇和下一篇帖子,现在我在与Twig相同的视图中所做的是通过以下方式获取它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
{% 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}}