Add new objects prev and next to Entity Post










0















I'm trying to find a way that can produce less request when visiting a Post Entity and be able to get the previous and next Post from that Entity, right now what I do in the same view with Twig is get it in the following way.



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


Twig Extension



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;



There would be some way to get it with less mysql requests, and adding it to the Post object in this particular way.



post.prev.title
post.next.title









share|improve this question




























    0















    I'm trying to find a way that can produce less request when visiting a Post Entity and be able to get the previous and next Post from that Entity, right now what I do in the same view with Twig is get it in the following way.



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


    Twig Extension



    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;



    There would be some way to get it with less mysql requests, and adding it to the Post object in this particular way.



    post.prev.title
    post.next.title









    share|improve this question


























      0












      0








      0


      1






      I'm trying to find a way that can produce less request when visiting a Post Entity and be able to get the previous and next Post from that Entity, right now what I do in the same view with Twig is get it in the following way.



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


      Twig Extension



      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;



      There would be some way to get it with less mysql requests, and adding it to the Post object in this particular way.



      post.prev.title
      post.next.title









      share|improve this question
















      I'm trying to find a way that can produce less request when visiting a Post Entity and be able to get the previous and next Post from that Entity, right now what I do in the same view with Twig is get it in the following way.



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


      Twig Extension



      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;



      There would be some way to get it with less mysql requests, and adding it to the Post object in this particular way.



      post.prev.title
      post.next.title






      php symfony doctrine






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 16 '18 at 3:37







      jcarlosweb

















      asked Nov 16 '18 at 1:25









      jcarloswebjcarlosweb

      305520




      305520






















          1 Answer
          1






          active

          oldest

          votes


















          2














          The only way I can think of, is storing a reference to the prev/next object in the entity. Then you can use joins to fetch them.



          You could also write a complex query, that loads your current entity and also performs both of your queries as subqueries or with UNION to fetch all 3 of them at the same time, but I think that would become quite unwieldy.



          I would not worry about these 3 queries though. Merging it into one big query will make it harder to read and debug and I doubt the performance gain will be even noticable. Unless you currently notice an impact on performance from these queries, optimizing it will just waste time you could spend on something else. You can do some performance analysis, i.e. by investigating bottlenecks in the performance and query tabs in the profiler toolbar.






          share|improve this answer






















            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53330165%2fadd-new-objects-prev-and-next-to-entity-post%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            2














            The only way I can think of, is storing a reference to the prev/next object in the entity. Then you can use joins to fetch them.



            You could also write a complex query, that loads your current entity and also performs both of your queries as subqueries or with UNION to fetch all 3 of them at the same time, but I think that would become quite unwieldy.



            I would not worry about these 3 queries though. Merging it into one big query will make it harder to read and debug and I doubt the performance gain will be even noticable. Unless you currently notice an impact on performance from these queries, optimizing it will just waste time you could spend on something else. You can do some performance analysis, i.e. by investigating bottlenecks in the performance and query tabs in the profiler toolbar.






            share|improve this answer



























              2














              The only way I can think of, is storing a reference to the prev/next object in the entity. Then you can use joins to fetch them.



              You could also write a complex query, that loads your current entity and also performs both of your queries as subqueries or with UNION to fetch all 3 of them at the same time, but I think that would become quite unwieldy.



              I would not worry about these 3 queries though. Merging it into one big query will make it harder to read and debug and I doubt the performance gain will be even noticable. Unless you currently notice an impact on performance from these queries, optimizing it will just waste time you could spend on something else. You can do some performance analysis, i.e. by investigating bottlenecks in the performance and query tabs in the profiler toolbar.






              share|improve this answer

























                2












                2








                2







                The only way I can think of, is storing a reference to the prev/next object in the entity. Then you can use joins to fetch them.



                You could also write a complex query, that loads your current entity and also performs both of your queries as subqueries or with UNION to fetch all 3 of them at the same time, but I think that would become quite unwieldy.



                I would not worry about these 3 queries though. Merging it into one big query will make it harder to read and debug and I doubt the performance gain will be even noticable. Unless you currently notice an impact on performance from these queries, optimizing it will just waste time you could spend on something else. You can do some performance analysis, i.e. by investigating bottlenecks in the performance and query tabs in the profiler toolbar.






                share|improve this answer













                The only way I can think of, is storing a reference to the prev/next object in the entity. Then you can use joins to fetch them.



                You could also write a complex query, that loads your current entity and also performs both of your queries as subqueries or with UNION to fetch all 3 of them at the same time, but I think that would become quite unwieldy.



                I would not worry about these 3 queries though. Merging it into one big query will make it harder to read and debug and I doubt the performance gain will be even noticable. Unless you currently notice an impact on performance from these queries, optimizing it will just waste time you could spend on something else. You can do some performance analysis, i.e. by investigating bottlenecks in the performance and query tabs in the profiler toolbar.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 16 '18 at 6:37









                dbrumanndbrumann

                10.2k12243




                10.2k12243





























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53330165%2fadd-new-objects-prev-and-next-to-entity-post%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Top Tejano songwriter Luis Silva dead of heart attack at 64

                    ReactJS Fetched API data displays live - need Data displayed static

                    政党