Laravel 5.3 New Features and Updates

Samuel Oloruntoba
💬 comments

Laracon is almost upon us. Unfortunately for me, I will not be able to attend. Guess, I'll have to wait for a couple of months to watch it on Youtube. That aside, this year's Laracon will be the stage for unveiling Laravel 5.3. Before the official release, we will look at a rundown of the new features coming to Laravel.

Since Laravel uses semver to version its releases, we know that this release is a minor release. Meaning we should expect minor features and some patches. Let's get started.

Blade's foreach $loop

This new release introduces a $loop variable inside a foreach loop. This variable provides a couple of properties that can help us easy manage indexes, increments in loops etc. Now in Laravel 5.3, we can do stuff like.

Table of Contents

        @foreach ($countries as $country)
            @if ($loop->count)
                @if ($loop->first)
                    <li class="list-item list-item--header">{{ $country->name }}</li>
                @elseif ($loop->last)
                    <li class="list-item list-item--footer">{{ $country->name }}</li>
                    <li class="list-item">{{ $country->name }}</li>

    Multiple Migration Paths

    If you have ever installed a Laravel package that needs a database migration, it involves you copying some migrations into the migration folder, but with Laravel 5.3 — a package can define its migration path, and when you run php artisan migrate all migrations will run without you having to clutter your migration directory.

    To let Laravel know about another migration directory, simply do.


    Query Builder Returns a Collection

    The query builder used to return an array. If we wanted to perform a large array of operations on the returned dataset, we would have to loop through the array. But collections makes that really simple for us to handle. So because of that reason, the query builder just like the ORM now returns a collection of objects. There is a pull request on the topic.

    Now we can do stuff like this.

    $result = DB::table('posts')->get();
    if ($result->first()) { } 
    if (!$result->isEmpty()) { }
    if ($result->count()) { }
    if (count($result)) { }

    This was not available before. Now, we can do cool operations like pluck, filter etc.

    Migration Rollback in Steps

    Instead of rolling back our entire migrations, we can now rollback in steps. With the new step flag added to artisan. So, now we can do this.

    php artisan migrate:rollback --step=1

    Ability to Customize Simple Pagination

    Laravel is bringing back the ability to customize simple navigation with views. You can also still use the pagination templates if you want, but this is still a nice feature to have. We can do stuff like this.

    <ul class="pagination">
        @if ($paginator->onFirstPage())
            <li class="disabled"><span>«</span></li>
                <a href="{{ $paginator->previousPageUrl() }}" rel="prev">«</a>

    Check out the official announcement on twitter.

    Laravel Echo

    Echo is meant to be an improvement over the current event broadcasting system. It seamlessly integrates with pusher's JavaScript library.

    Taylor Otwell has made a video to better explain Echo. Echo also has an npm package that makes using sockets on the frontend easier.

    Misc and Conclusion

    Other features included with version 5.3 are:

    In conclusion, maybe in a major release — support for MongoDB. What would you like to see in future versions of Laravel, let us know down in the comments?

    Samuel Oloruntoba

    39 posts

    Samuel is a multi-disciplinary web developer. Nowadays, he spends most of his time in the browser trying to understand it and squeeze as much performance as he can. He's also a proficient Vue/Laravel developer and absolutely slays at FIFA. You can reach out to him for business or Scotch related matters.