Laravel Eager Loading with method example
When you make relationship in Laravel eloquent relationship, there are two ways you can access eloquent relationships data. In a lazy loading, when you access the property, then relationships data loaded.
For example, Post model is belongs to User model. So when you want to get all users data with posts records. Here is Post model.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
/**
* Get the users that write article
*/
public function user()
{
return $this->belongsTo(User::class);
}
}
Now we get data in controller.
use App\Models\Post;
$posts = Post::all();
foreach ($posts as $post) {
echo $post->user->name;
}
In the above example, all posts data will loop and retrieve user for the post. What if there are hundreds of posts? All will loop and retrive user for the post in all loop.
In eager loading, all the users are also retrived with post records.
$posts = Post::with('user')->get();
foreach ($posts as $post) {
echo $post->user->name;
}
This way, eager loading is better than lazy loading to retrive data in one time. Now lets look mode example for eager loading.
If you have multiple relationships with single model, you can retrive all relationships records with eager loading.
$posts = Post::with(['user', 'category'])->get();
Nested Eager Loading
If you have nested Eager Loading, you may retrive as below:
$posts = Post::with('user.address')->get();
If you only want to retrive specific columns in Eager Loading, pass id and any other foreign key columns which you want to retrive with records.
$posts = Post::with('user:id,email,phone,post_id')->get();
Copyright 2023 HackTheStuff