Laravel: Eager loading

Understand and eliminate

Laravel: Eager loading

Posted by Rukmi Patel | September 18, 2017

First, Lets understand why eager loading come in to existence! To understand nature of this problem, I am taking an example of below Laravel code.

$users = User::take(5)->get();

it will fire query in MySql that is:

SELECT * FROM users LIMIT 5;

Now for example, User model is associated with Department model in many-to-one relationship.

class Department extends Model{
    public function users(){
        return $this->hasMany('App\User');
    }
}

And User model is related to Department with belongs-to association.

class User extends Model{
    public function department(){ 
       return $this->belongsTo('App\Department');
    }
}

Now to display department for each user we normally write code this way.

    <ul>
        @foreach($users as $user)
            <li>{{$user->state()->name}} </li> 
        @endforeach
    </ul>

Problem here is, initial query and ensuring iteration results in the execution of 6 queries! Thus the name “N + 1”, because we’re executing one query to retrieve the five users, and then five additional queries to retrieve the name of each user’s department!

We can inform Laravel to preload data using with() to minimize DB interaction and still gets same output.

$users = User::with('department')->take(5)->get();

Add a comment

*Please complete all fields correctly

Related Blogs

MEAN-Vs-Full-stack
Posted by Rukmi Patel | April 9, 2019
Comparing Full Stack V/S MEAN Stack approach
The web and mobile app development services have stepped up to next level in last 5 years. Web and apps are all built utilizing a ‘stack’ of various technologies like...
Posted by Rukmi Patel | September 6, 2018
Headless Drupal or DeCoupled Drupal
Now a days, front-end technologies like Angular, React.js, Backbone.js etc have started attracting audience because of its advantages over traditional rendering approach. Server side frameworks like Laravel, Node.js have already...
Posted by Rukmi Patel | September 20, 2017
Laravel 5.5 – Collection Dumping.
Laravel 5.5 has introduced 2 new methods on collections class which makes debugging easier than before. Lets take example of simple collection setup and pipe through some filters. collect([1,2,3])->map(function($i){ return...