Laravel 5.4 pagination with relationship












3















I have two tables questions and answers. Question table has relationship on answer table.



When paginating eloquent results on the first page it returns lets say 7 unanswered questions (with empty relationship) and 3 with answered questions, but I need it to return 5 with answers and 5 without answers in total 10.



Right now i'm doing this:



Question::with(['user', 'answers])->paginate(10);


Is there any way to return always 5 answered/5 unanswered instead of random?










share|improve this question























  • yeah, make a query for that, figure out the query in MySQL then translate it into laravel

    – Indra
    Nov 15 '18 at 12:07
















3















I have two tables questions and answers. Question table has relationship on answer table.



When paginating eloquent results on the first page it returns lets say 7 unanswered questions (with empty relationship) and 3 with answered questions, but I need it to return 5 with answers and 5 without answers in total 10.



Right now i'm doing this:



Question::with(['user', 'answers])->paginate(10);


Is there any way to return always 5 answered/5 unanswered instead of random?










share|improve this question























  • yeah, make a query for that, figure out the query in MySQL then translate it into laravel

    – Indra
    Nov 15 '18 at 12:07














3












3








3


1






I have two tables questions and answers. Question table has relationship on answer table.



When paginating eloquent results on the first page it returns lets say 7 unanswered questions (with empty relationship) and 3 with answered questions, but I need it to return 5 with answers and 5 without answers in total 10.



Right now i'm doing this:



Question::with(['user', 'answers])->paginate(10);


Is there any way to return always 5 answered/5 unanswered instead of random?










share|improve this question














I have two tables questions and answers. Question table has relationship on answer table.



When paginating eloquent results on the first page it returns lets say 7 unanswered questions (with empty relationship) and 3 with answered questions, but I need it to return 5 with answers and 5 without answers in total 10.



Right now i'm doing this:



Question::with(['user', 'answers])->paginate(10);


Is there any way to return always 5 answered/5 unanswered instead of random?







laravel pagination






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 15 '18 at 10:39









JohnJohn

185




185













  • yeah, make a query for that, figure out the query in MySQL then translate it into laravel

    – Indra
    Nov 15 '18 at 12:07



















  • yeah, make a query for that, figure out the query in MySQL then translate it into laravel

    – Indra
    Nov 15 '18 at 12:07

















yeah, make a query for that, figure out the query in MySQL then translate it into laravel

– Indra
Nov 15 '18 at 12:07





yeah, make a query for that, figure out the query in MySQL then translate it into laravel

– Indra
Nov 15 '18 at 12:07












1 Answer
1






active

oldest

votes


















0














The paginate() method returns a LengthAwarePaginator object so you can create your own as the doc suggests. Maybe (I haven't tested it) you can do it more or less like this:



$limit = $request->input('limit', 5);
$page = $request->input('page', 1);
$total = Question::count();
$offset = ($page - 1) * $limit;

$items1 = Question::with(['user', 'answers'])->has('answers')->limit($limit)->offset($offset)->get();
$items2 = Question::with(['user', 'answers'])->doesntHave('answers')->limit($limit)->offset($offset)->get();

$paginator = new IlluminatePaginationLengthAwarePaginator(
$items1->concat(items2),
$total,
$limit,
$page,
['path' => $request->getPathInfo()]
);

return response()->json($paginator);





share|improve this answer


























  • It almost works, but for some reason on second page returns duplicates from first page.I also had to add $paginator->setPath($request->getPathInfo()); or links would not work.

    – John
    Nov 15 '18 at 14:29













  • Ups, my bad. I made some change to fix the duplicate issue. I also incorporated alternative way to set the path if it is necessary

    – Yohanes Gultom
    Nov 15 '18 at 14:46













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%2f53317551%2flaravel-5-4-pagination-with-relationship%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









0














The paginate() method returns a LengthAwarePaginator object so you can create your own as the doc suggests. Maybe (I haven't tested it) you can do it more or less like this:



$limit = $request->input('limit', 5);
$page = $request->input('page', 1);
$total = Question::count();
$offset = ($page - 1) * $limit;

$items1 = Question::with(['user', 'answers'])->has('answers')->limit($limit)->offset($offset)->get();
$items2 = Question::with(['user', 'answers'])->doesntHave('answers')->limit($limit)->offset($offset)->get();

$paginator = new IlluminatePaginationLengthAwarePaginator(
$items1->concat(items2),
$total,
$limit,
$page,
['path' => $request->getPathInfo()]
);

return response()->json($paginator);





share|improve this answer


























  • It almost works, but for some reason on second page returns duplicates from first page.I also had to add $paginator->setPath($request->getPathInfo()); or links would not work.

    – John
    Nov 15 '18 at 14:29













  • Ups, my bad. I made some change to fix the duplicate issue. I also incorporated alternative way to set the path if it is necessary

    – Yohanes Gultom
    Nov 15 '18 at 14:46


















0














The paginate() method returns a LengthAwarePaginator object so you can create your own as the doc suggests. Maybe (I haven't tested it) you can do it more or less like this:



$limit = $request->input('limit', 5);
$page = $request->input('page', 1);
$total = Question::count();
$offset = ($page - 1) * $limit;

$items1 = Question::with(['user', 'answers'])->has('answers')->limit($limit)->offset($offset)->get();
$items2 = Question::with(['user', 'answers'])->doesntHave('answers')->limit($limit)->offset($offset)->get();

$paginator = new IlluminatePaginationLengthAwarePaginator(
$items1->concat(items2),
$total,
$limit,
$page,
['path' => $request->getPathInfo()]
);

return response()->json($paginator);





share|improve this answer


























  • It almost works, but for some reason on second page returns duplicates from first page.I also had to add $paginator->setPath($request->getPathInfo()); or links would not work.

    – John
    Nov 15 '18 at 14:29













  • Ups, my bad. I made some change to fix the duplicate issue. I also incorporated alternative way to set the path if it is necessary

    – Yohanes Gultom
    Nov 15 '18 at 14:46
















0












0








0







The paginate() method returns a LengthAwarePaginator object so you can create your own as the doc suggests. Maybe (I haven't tested it) you can do it more or less like this:



$limit = $request->input('limit', 5);
$page = $request->input('page', 1);
$total = Question::count();
$offset = ($page - 1) * $limit;

$items1 = Question::with(['user', 'answers'])->has('answers')->limit($limit)->offset($offset)->get();
$items2 = Question::with(['user', 'answers'])->doesntHave('answers')->limit($limit)->offset($offset)->get();

$paginator = new IlluminatePaginationLengthAwarePaginator(
$items1->concat(items2),
$total,
$limit,
$page,
['path' => $request->getPathInfo()]
);

return response()->json($paginator);





share|improve this answer















The paginate() method returns a LengthAwarePaginator object so you can create your own as the doc suggests. Maybe (I haven't tested it) you can do it more or less like this:



$limit = $request->input('limit', 5);
$page = $request->input('page', 1);
$total = Question::count();
$offset = ($page - 1) * $limit;

$items1 = Question::with(['user', 'answers'])->has('answers')->limit($limit)->offset($offset)->get();
$items2 = Question::with(['user', 'answers'])->doesntHave('answers')->limit($limit)->offset($offset)->get();

$paginator = new IlluminatePaginationLengthAwarePaginator(
$items1->concat(items2),
$total,
$limit,
$page,
['path' => $request->getPathInfo()]
);

return response()->json($paginator);






share|improve this answer














share|improve this answer



share|improve this answer








edited Nov 15 '18 at 14:46

























answered Nov 15 '18 at 12:37









Yohanes GultomYohanes Gultom

2,14011526




2,14011526













  • It almost works, but for some reason on second page returns duplicates from first page.I also had to add $paginator->setPath($request->getPathInfo()); or links would not work.

    – John
    Nov 15 '18 at 14:29













  • Ups, my bad. I made some change to fix the duplicate issue. I also incorporated alternative way to set the path if it is necessary

    – Yohanes Gultom
    Nov 15 '18 at 14:46





















  • It almost works, but for some reason on second page returns duplicates from first page.I also had to add $paginator->setPath($request->getPathInfo()); or links would not work.

    – John
    Nov 15 '18 at 14:29













  • Ups, my bad. I made some change to fix the duplicate issue. I also incorporated alternative way to set the path if it is necessary

    – Yohanes Gultom
    Nov 15 '18 at 14:46



















It almost works, but for some reason on second page returns duplicates from first page.I also had to add $paginator->setPath($request->getPathInfo()); or links would not work.

– John
Nov 15 '18 at 14:29







It almost works, but for some reason on second page returns duplicates from first page.I also had to add $paginator->setPath($request->getPathInfo()); or links would not work.

– John
Nov 15 '18 at 14:29















Ups, my bad. I made some change to fix the duplicate issue. I also incorporated alternative way to set the path if it is necessary

– Yohanes Gultom
Nov 15 '18 at 14:46







Ups, my bad. I made some change to fix the duplicate issue. I also incorporated alternative way to set the path if it is necessary

– Yohanes Gultom
Nov 15 '18 at 14:46






















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%2f53317551%2flaravel-5-4-pagination-with-relationship%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

Florida Star v. B. J. F.

Danny Elfman

Lugert, Oklahoma