Laravel 5.3 New Features and Updates

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.

<ul>
    @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>
            @else
                <li class="list-item">{{ $country->name }}</li>
            @endif
        @endif

    @endforeach
</ul>

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.

$this->loadMigrationsFrom('path/to/migrations/folder');

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>
    @else
        <li>
            <a href="{{ $paginator->previousPageUrl() }}" rel="prev">«</a>
        </li>
    @endif

</ul>

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

Self-proclaimed full-stack web developer and a quasi-academic. I work mostly on the backend (PHP and Node) with a recent enthusiasm for frontend development (React, SVG, HTML5 Canvas).