Laravel 5.4 pagination with relationship
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
add a comment |
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
yeah, make a query for that, figure out the query in MySQL then translate it into laravel
– Indra
Nov 15 '18 at 12:07
add a comment |
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
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
laravel pagination
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
add a comment |
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
add a comment |
1 Answer
1
active
oldest
votes
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);
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
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%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
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);
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
add a comment |
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);
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
add a comment |
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);
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);
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
add a comment |
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
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%2f53317551%2flaravel-5-4-pagination-with-relationship%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
yeah, make a query for that, figure out the query in MySQL then translate it into laravel
– Indra
Nov 15 '18 at 12:07