Add new objects prev and next to Entity Post
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
add a comment |
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
add a comment |
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
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
php symfony doctrine
edited Nov 16 '18 at 3:37
jcarlosweb
asked Nov 16 '18 at 1:25
jcarloswebjcarlosweb
305520
305520
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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.
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
add a comment |
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.
add a comment |
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.
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.
answered Nov 16 '18 at 6:37
dbrumanndbrumann
10.2k12243
10.2k12243
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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