php – Laravel 4.1 Eloquent – 过滤关系集合

我在使用laravel 4.1 hasWhere过滤关系时遇到问题.

迭代1 – 获取所有帖子:完成

$posts = Post::all();

迭代2 – 获取所有帖子延迟加载评论:完成

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

迭代3 – 只获取包含评论和延迟加载的帖子:完成

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

迭代4 – 仅获取已发布评论和延迟加载的帖子:已损坏

$posts = Post::with('comments')
    ->whereHas('comments', function($q) {
        return $q->where('published', '=', 1);
    })
    ->get();

print_r的输出($posts-> toArray())显示迭代3和4的输出完全相同.
我无法根据’comments.published’= 1的条件过滤关系.

最佳答案 我找到了解决方案,但我不确定这是最优雅的解决方案.因此,我将这个开放给更好的建议.

    $posts = Post::
        ->whereHas('comments', function($q)
            {
                $q->where('published', '=', 1);
            })
        ->with([
            'comments' => function($q)
            {
                $q->where('published', '=', 1);
            },
            ])->get();

基本上,我的解决方案包括过滤雄辩的结果,并分别过滤延迟加载.这有必要吗?有没有更好的方法来实现这一目标?

点赞