我有两个模型Post和Comment,我想获得所有其最后评论为活动的帖子:
// Model Post
public function comments()
{
return $this->hasMany('comments');
}
//Model Comment
public function post()
{
return $this->belongsTo('post');
}
我尝试了此解决方案:
public function lastComment()
{
return $this->hasOne('comment')->latest()
}
并在我的控制器中:
$postsWithLastActiveComment = Post::whereHas('lastComment', function($q){
$q->where('active',1);
})->all();
但是在此解决方案中,如果上一条评论未激活,则会采用上一条评论
答案 0 :(得分:1)
->latest()
仅按created_at的顺序对帖子进行排序,以便仅获取您需要的最新评论->latest()->first()
答案 1 :(得分:1)
我认为下面的代码应该有效!
public function comments()
{
return $this->hasMany('comments');
}
public function lastComment()
{
return $this->comments()->latest()->first();
}
答案 2 :(得分:1)
我不确定是否还有另一种更简单的方法可以执行此操作,但是也许您可以使用子查询来尝试?
$lastComment = Comment::select('active')
->whereColumn('post_id', 'posts.id')
->latest()
->limit(1)
->getQuery();
$posts = Post::select('posts.*')
->selectSub($lastComment, 'last_comment_is_active')
->having('last_comment_is_active', 1)
->get();
答案 3 :(得分:1)
不是吗
$postsWithLastActiveComment = Post::whereHas('lastComment', function($q){
$q->where('active',1);
})->all();
是
$postsWithLastActiveComment = Post::whereHas('lastComment', function($q){
$q->where('active',1);
})->get();
答案 4 :(得分:0)
根据您的问题,帖子模型有很多评论。并且您要从帖子中获取评论,其中活跃状态为1,并且必须为最新ID 。
获取如下所示的最后一条评论
public function lastComment()
{
return $this->hasOne('comment')->latest()->take(1);
}
获取所有具有posts
的{{1}},如下所示
lastComment
并如下过滤$latestCommentPosts = Post::whereHas('lastComment')->get()
latestCommentPosts
或者,您也可以通过以下查询进行归档。
$latestCommentPosts->where('active', 1)->get()
例如,您获得的所有最新评论均为1。