我一直在使用 has 方法来查询相关表中是否存在数据,并且效果很好。使用 Laravel 网站上的代码示例,您可以执行以下操作来获取任何具有相关评论的帖子。
$posts = Post::has('comments')->get();
例如,我希望能够查询最近三十天有评论的任何帖子。由于 has 方法只能计算相关行,因此我不确定是否有一个好方法可以做到这一点。
好的,这就是我能想到的。这可能不是最好的解决方案,但它确实有效,而且似乎并没有太污染。首先,我们需要添加对Carbon
类的引用Eloquent\Collection
。
use \Carbon\Carbon;
use \Illuminate\Database\Eloquent\Collection;
Carbon
Laravel 确实作为依赖项提供,开箱即用,但无论如何将其添加到您自己项目的依赖项中会很聪明。然后,这段代码应该这样做:
// Gather all distinct 'post_id' from Comments made in the last 30 days
// along with its Post objects
$comments = Comment::with('Post')
->where('created_at', '>', Carbon::now()->subMonth())
->distinct()
->get(array('post_id'));
// Since we only want Posts, loop through the Comments collection and add
// the Posts to a new collection
$posts = new Collection;
foreach ($comments as $comment) {
$posts->add($comment->post);
}
来自 Laravel 4 文档:
$posts= Post::with(array('comments' => function($query)
{
$query->where('published', '>=', 'date- 1 month'); //look date functions up
}))->get();
请参阅laravel 4 文档下的 Eager Load Constraints