Laravel 4.1 Eloquent - 过滤关系集合

Gra*_*avy 5 php orm laravel eloquent

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

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

$posts = Post::all();
Run Code Online (Sandbox Code Playgroud)

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

$posts = Post::with('comments')->get();
Run Code Online (Sandbox Code Playgroud)

迭代 3 - 仅获取带有评论和延迟加载的帖子:完成

$posts = Post::with('comments')->has('comments')->get();
Run Code Online (Sandbox Code Playgroud)

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

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

输出print_r($posts->toArray())显示迭代 3 和 4 的输出完全相同。我无法根据'comments.published' = 1.

Gra*_*avy 2

我找到了一个解决方案,但我不确定这是最优雅的解决方案。因此,我将保留这一点以寻求更好的建议。

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

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