我正在开展一个基于laravel的项目,包括作者,帖子和评论作为模型。
模型之间的关系如下: 作者 - > hasMany Post 发布 - >有很多评论。
问题如下: 作者发了多个帖子,所有帖子都有多个评论。我想通过内部成员的最新帖子获得作者的评论。
我的模型如下所示 -
Author.php
public function post() {
return $this->hasMany('App\Post');
}
public function latestPost() {
return $this->hasOne('App\Post', 'latest_post_id', 'id')-
>orderBy('created_at', 'desc');
}
post.php中
public function comment() {
return $this->hasMany('App\Comment', 'post_id', 'id');
}
我用来获取数据的查询如下:
$author_count = Author::whereHas('latestPost.comment', function ($query) {
$query->createdByInternal();
})->count();
当我执行此查询时,它会考虑所有Post模型,而不仅仅是最新的Post,并给出内部成员在任何帖子上发表评论的作者。
然而,在急切加载最新的PostPost查询时使用"用"功能,我只收到最新帖子的评论。
$author = Author::with('latestPost.comment')->get();
提前致谢。
答案 0 :(得分:1)
如果您想要对帖子中没有created_by_internal
= null
条评论的作者进行统计,请使用whereDoesntHave()
:
Author::whereDoesntHave('latestPost.comment', function ($query) {
$query->notCreatedByInternal();
})
->count();
在关系定义中,将外键放在id
:
public function latestPost()
{
return $this->hasOne('App\Post', 'latest_post_id', 'id')->latest();
}
另外,将范围更改为:
public scopeNotCreatedByInternal($query)
{
return $query->whereNull('created_by_internal');
}