Chiko
Chiko

Reputation: 2340

laravel pick last comment posted related to each post

I have got three tables in laravel like so:

Users, posts, and comments

I'm trying to come up with a query that fetches me all the user's posts, plus the date of last comment with each post.

Approach i've taken that's not working perfectly is:

$posts = User::find($userId)->posts()->with('latestComment')->get();

In my Post model I have:

public function latestComment()
{
    return $this->hasOne(Comment::class)->latest();
}

In my findings, i haven't been to see a way to get the date from the lastComment load.

Any pointers welcome,

Thanks

Upvotes: 2

Views: 2987

Answers (3)

Alexey Mezenin
Alexey Mezenin

Reputation: 163788

You should use eager loading constraint. Code from the other answers will first load all comments, which you don't want.

$posts = Post::where('user_id', $userId)
             ->with(['comments' => function($q) {
                 $q->taletst()->take(1);
             }])
             ->get();

Upvotes: 0

EddyTheDove
EddyTheDove

Reputation: 13259

You can use the existing relationship and get the latest comment.

public function comments() {
    return $this->hasMany(Comment::class);
}

public function latestComment() {
    return $this->comments()->last();
}

Upvotes: 0

Chiko
Chiko

Reputation: 2340

Just discovered one needs to add the foreign key to the select method like so:

return $this->hasOne(Comment::class)->latest()->select('field','foreign_key');

Upvotes: 1

Related Questions