我一直在使用has方法来查询相关表中数据的存在,而且工作得很好。使用Laravel网站上的代码示例,您可以执行以下操作以获取与其关联的注释的任何帖子。
$posts = Post::has('comments')->get();
作为一个例子,我希望能够查询过去30天内有任何评论的帖子。由于has方法只能计算相关行,因此我不确定这是一种很好的方法。
答案 0 :(得分:0)
来自Laravel 4文档:
$posts= Post::with(array('comments' => function($query)
{
$query->where('published', '>=', 'date- 1 month'); //look date functions up
}))->get();
下的Eager Load Constraints
答案 1 :(得分:0)
好的,这是我能想到的。它可能不是最好的解决方案,但它确实有效并且似乎没有太多污染。首先,我们需要添加对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);
}