sn n
sn n

Reputation: 399

Controller method issue in Laravel Eloquent

This is my Controller method wherein I want to fetch posts by user id. I also have relationship defined in User model

public function posts()
{
    return $this->hasMany('Post','user_id','id');
}

UserController.php

use App\Post;
public function findPostsByUser($id){
    $user = User::findOrFail($id);    
    $posts = $user->posts()->get();
    return $posts;
}

But it is giving me 'Post' not found error. Can someone help on this.

Upvotes: 1

Views: 49

Answers (2)

Davit Zeynalyan
Davit Zeynalyan

Reputation: 8618

Change relation method to

use App\Post;
....
public function posts()
{
    return $this->hasMany(Post::class,'user_id','id');
}

or

public function posts()
{
    return $this->hasMany('App\Post','user_id','id');
}

If you wont to get only posts that case use this

public function findPostsByUser($id){
    $posts = Post::where('user_id', $id)->get();
    return $posts;
} 

The second solution has 1 query, but first solution has 2 query in db.

Also you can do it this way

public function findPostsByUser($id){
    $posts = Post::whereUserId($id)->get();
    return $posts;
}

Upvotes: 2

Piazzi
Piazzi

Reputation: 2636

In your Post model make sure you have the relation defined like this:


public function user()
{
    return $this->belongsTo('App\User');
}

And change your User model to this:

public function posts()
{
    return $this->hasMany('App\Post','user_id','id');
}

Upvotes: 2

Related Questions