查询与子表上的where子句的关系

时间:2013-05-29 19:56:03

标签: php laravel laravel-4

我一直在使用has方法来查询相关表中数据的存在,而且工作得很好。使用Laravel网站上的代码示例,您可以执行以下操作以获取与其关联的注释的任何帖子。

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

作为一个例子,我希望能够查询过去30天内有任何评论的帖子。由于has方法只能计算相关行,因此我不确定这是一种很好的方法。

2 个答案:

答案 0 :(得分:0)

来自Laravel 4文档:

 $posts= Post::with(array('comments' => function($query)
 {
    $query->where('published', '>=', 'date- 1 month'); //look date functions up
 }))->get();

请参阅laravel 4 documentation

下的Eager Load Constraints

答案 1 :(得分:0)

好的,这是我能想到的。它可能不是最好的解决方案,但它确实有效并且似乎没有太多污染。首先,我们需要添加对CarbonEloquent\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);
}