0

我一直在使用 has 方法来查询相关表中是否存在数据,并且效果很好。使用 Laravel 网站上的代码示例,您可以执行以下操作来获取任何具有相关评论的帖子。

$posts = Post::has('comments')->get();

例如,我希望能够查询最近三十天有评论的任何帖子。由于 has 方法只能计算相关行,因此我不确定是否有一个好方法可以做到这一点。

4

2 回答 2

0

好的,这就是我能想到的。这可能不是最好的解决方案,但它确实有效,而且似乎并没有太污染。首先,我们需要添加对Carbon类的引用Eloquent\Collection

use \Carbon\Carbon;
use \Illuminate\Database\Eloquent\Collection;

CarbonLaravel 确实作为依赖项提供,开箱即用,但无论如何将其添加到您自己项目的依赖项中会很聪明。然后,这段代码应该这样做:

// 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);
}
于 2013-05-29T21:59:24.050 回答
0

来自 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

于 2013-05-29T20:20:24.760 回答