11
votes

I'm trying to get a result from the database in a laravel 5 based application and for the life of me can't figure it out.

I want to chose the top 5 results DESC from a row called count. This is what I have:

$full = Fulls::all()->orderBy('count', 'desc')->take(5)->get();

I tried plenty of other ways too but nothing seems to work. Now I'm getting an error:

FatalErrorException in indexController.php line 19: Call to undefined method Illuminate\Database\Eloquent\Collection::orderBy()

However, anywhere I look I see people working with orderBy(), so... what am I doing wrong?

Thanks in advance...

4

4 Answers

27
votes

You should use Fulls::orderBy(..)->take(5)->get() instead.

4
votes

If you want to sort/order a collection you can use the sortBy() method.

eg.

$full = Fulls::get(); // Get the Fulls collections
$full = $full->sortBy('count')->take(5); 
1
votes

You can skip for offset

$full = Fulls::orderBy('count', 'desc')->skip(0)->take(5)->get(); //get first 5 rows
$full = Fulls::orderBy('count', 'desc')->skip(5)->take(5)->get(); //get next 5 rows

Actual mysql query will look like:

SELECT * FROM fulls ORDER BY count DESC LIMIT 0,5
0
votes

You can use skip and take function of laravel and orderBy

Fulls::where([['user_id','=',auth()->user()->id]])
                ->where([['title','LIKE',"%".$text_val."%"]])
                ->orderBy('id','DESC')
                ->skip($offset)
                ->take(2)