I have three tables as define below
User
- id
- name
Post
- id
- text
- user_id
Comments
- id
- text
- post_id
This is User model User.php
JavaScript
x
class User
{
public function post()
{
return $this->hasMany(Post::class);
}
}
This is my post model Post.php
JavaScript
class Post
{
public function comments()
{
return $this->hasMany(Comment::class);
}
}
Issue:
I want to display no.of comments per user using eloquent eager loading.
Can anyone help me with that? Thanks in advance.
Advertisement
Answer
You may define a new hasManyThrough
relationship (docs) for user’s comments:
JavaScript
class User
{
public function comments()
{
return $this->hasManyThrough(
'AppComment',
'AppPost',
'user_id', // Foreign key on posts table...
'post_id', // Foreign key on comments table...
'id', // Local key on users table...
'id' // Local key on posts table...
);
}
}
Now you can count each user’s comments (Laravel docs):
JavaScript
$users = AppUser::withCount('comments')->get();
foreach ($users as $user) {
echo $user->comments_count;
}