我在使用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();
基本上,我的解决方案包括过滤雄辩的结果,并分别过滤延迟加载.这有必要吗?有没有更好的方法来实现这一目标?