How to order by all() in Laravel

One common issue that I see with Laravel newcomers is that they have hangups using Eloquent correctly. The most basic reference given in the documentation and tutorials is using the all() method.

$users = User::all();

But what happens when you want to sort your users?

As newcomers to the framework, I feel like most are too excited to “jump in and build something” instead of learning more about it. (But who can blame them, right?!?) So something like this would happen:

$users = User::all()->orderBy('name', 'ASC');

# BadMethodCallException with message 'Method orderBy does not exist.'

// or

$users = User::orderBy('name', 'ASC')->all();

# BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::all()'

Forget about all()

In my experience, I’ve never needed an unordered dump of data in an application.

Note that all() is a convenience method for get() but does not allow you to chain additional methods. Take a look:

public static function all($columns = ['*'])
{
    return (new static)->newQuery()->get
        (is_array($columns) ? $columns : func_get_args()
    );
}

By using get() you’ll be able to achieve the desired results.

$users = User::orderBy('name', 'ASC')->get();

// and

$users = User::where('email', 'LIKE', '%@gmail.com')  
    ->orderBy('name', 'ASC')->get();

So any time you reach for the all() method, I highly recommend using get() instead.