1
votes

I'm trying to achieve pagination and it is working absolutely fine until I add sortByDesc() along with my eloquent query.

web.php (route file)

Route::get('/', function(){
  $posts = Post::simplePaginate(5)->sortByDesc("post_id"); 
  //sortByDesc("post_id") this causes the problem
}

When I prepare the view for the pagination with {{ $posts->links() }} in the specified view, I get the following error-

Method links does not exist

If I remove the sorting condition from the query, it works perfectly.

What can be the reason behind this behaviour?

2

2 Answers

4
votes

Try putting the sort on the query rather than the pagination:

Post::orderBy('post_id', 'desc')->simplePaginate(5);
3
votes

To extend to what @RossWilson said.

sortBy is a collection function, not an eloquent function, the correct eloquent function is orderBy.

Also, see simplePaginate() as if you were performing a get(), first(), find().

What would you place first the get or the order? ... maybe the get if you want to order a collection (with sortBy), but since simplePaginate does not return the same collection that a get() would return, sortby does not work. And probably messes up the pagination object/collection.