您的查询中的问题是您已经在执行它。检查这部分:
Auth::user()->posts->...
^^^^^^^^
您正在将关系作为属性访问。当您这样做时,查询已经在执行。您需要做的是在执行查询之前限制结果。为此,请访问关系,但作为函数访问,这样您会收到查询生成器的实例,以在执行查询之前应用所有约束(在此示例中为 ->get())。 To limit a relationship with conditions, you can make use of the whereHas():
$posts = Auth::user()->posts()->whereHas(['comments' => function($query) {
$query->where('created_at', '>=', today());
}])
->get();
在上面的代码中,您将收到今天至少有一条评论的所有帖子。但是你还没有收到附在他们身上的 cmets。为此,您需要使用 with() 方法预先加载关系。
$posts = Auth::user()->posts()->whereHas('comments', function($query) {
$query->where('created_at', '>=', today());
})
->with('comments') // <--
->get();
应该这样做。但鉴于您需要对元素进行分页,请将get() 与paginate() 方法交换:
$posts = Auth::user()->posts()->whereHas('comments', function($query) {
$query->where('created_at', '>=', today());
})
->with('comments')
->paginate(15); // <---