我有一个user->hasMany-> posts->hasMany ->comments
关系。
我想在评论昨天留下并计算评论的不同帖子中获取所有用户评论。
到目前为止我正在做的事情:
$user = User::where("id", $id)->with("comments")->where(["comments"=>function ($a){
return $a->where("created_At", DB::Raw("YESTERDAY(created_at)"))
}])->get();
,但它返回了我所有的评论。
应该是:
$posts = Post::where("user_id", $id)->with(["comments"=> function ($query){
$query->where("comments.created_at", Carbon::yesterday());
})->get();
$countComments = $posts->sum(function($query){
return $query->comments->count();
});
$countComments
现在应该给您昨天的用户注释数量。
尝试:
$yesterday = date("Y-m-d", strtotime( '-1 days' ) );
$user = User::where("id", $id)->with("comments")->where(["comments"=>function ($a) use ($yesterday) {
return $a->whereDate('created_at', $yesterday )
}])->get();
如果要加载所有帖子中计数的注释用户,请使用 withCount()
:
User::withCount(['postsComments' => function($q) {
return $q->whereDate('created_at', Carbon::yesterday());
}])
->find($id);
要使它起作用,请定义新的hasManyThrough
关系:
public function postsComments()
{
return $this->hasManyThrough(Comment::class, Post::class);
}