Laravel eloquent version change from 5.4 to 5.8. What are the major differences and how to upgrade?

Updated: Feb 04, 2025

Laravel eloquent version change from 5.4 to 5.8. What are the major differences and how to upgrade?

Upgrading Laravel from version 5.4 to 5.8 involves several changes, and while the focus of this answer will be on Eloquent ORM, some other changes may also impact your application. Here's a comprehensive guide on upgrading Eloquent from Laravel 5.4 to 5.8.

Major differences between Laravel Eloquent 5.4 and 5.8:

  1. Support for PHP 7.3 and Laravel 5.8 requires a minimum PHP version of 7.2.
  2. Improved type hinting and autoloading.
  3. Support for Laravel's new query builder macros.
  4. Improved error messages and exceptions.
  5. Deprecated methods and features.

To upgrade Laravel Eloquent from version 5.4 to 5.8, follow these steps:

Step 1: Update Composer dependencies First, update your project dependencies by running the following command in your terminal:

composer update laravel/framework

This command will update your Laravel installation, including Eloquent ORM, to the latest version.

Step 2: Update your .env file Check your .env file for any database-related settings and update them if necessary. Laravel 5.8 introduces a new default database driver (MySQL), so make sure your database driver is set correctly.

Step 3: Update your models Laravel 5.8 introduces some changes to Eloquent model relationships. If you have any complex relationships in your models, you may need to update them. For example, the belongsToMany method now accepts a third argument for the pivot table.

public function users()
{
    return $this->belongsToMany(User::class, 'posts_users');
}

Step 4: Update your controllers and queries Laravel 5.8 introduces some changes to the query builder and controller methods. For example, the find method on Eloquent models now returns an instance of the model or null if the record is not found.

$user = User::find(1);

if ($user) {
    // The user was found
} else {
    // The user was not found
}

Step 5: Update your routes and views Laravel 5.8 introduces some changes to routing and view composition. Make sure your routes and views are updated accordingly.

Step 6: Deprecated methods and features Laravel 5.8 deprecated some methods and features. Make sure to update your codebase to use the recommended alternatives. For example, the findOrCreate method on Eloquent models is now deprecated. Use the firstOrCreate method instead.

// Deprecated: findOrCreate
$user = App\User::firstOrCreate(['email' => '[email protected]'], ['name' => 'John Doe']);

// Recommended: firstOrCreate
$user = App\User::firstOrCreate([
    'email' => '[email protected]',
], function ($user) {
    $user->name = 'John Doe';
});

In conclusion, upgrading Laravel Eloquent from version 5.4 to 5.8 involves several changes, including updating dependencies, models, controllers, queries, routes, views, and handling deprecated methods and features. Make sure to thoroughly test your application after the upgrade to ensure everything is working correctly.