我在使用 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();
基本上,我的解决方案涉及过滤 Eloquent 结果,并单独过滤延迟加载。这是必要的吗?有没有更好的方法来实现这一目标?
关于php - Laravel 4.1 Eloquent - 过滤关系集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20933880/