您好我有以下代码来检索所有帖子及其评论(1对多关系)
$posts = Post::with('comments')->get();
现在它的效果很好,但我的问题是,如果给出一个可选参数,我想对帖子标题或评论内容进行搜索。类似的东西:
$posts = Post::with('comments');
if (Request::has('query')) {
$posts = $posts->where('content', 'LIKE', '%' . Request::get('query'))->orwhere('title', 'LIKE', '%' . Request::get('query'));
}
$posts = $posts->get();
现在这不起作用,因为“内容”列仅存在于评论表中。有没有办法在热切加载的评论关系中使用where条件?
答案 0 :(得分:0)
在构建查询时使用whereHas()
,来自文档的示例:
$posts = Post::whereHas('comments', function ($query) {
$query->where('content', 'like', 'foo%');
})->get();
答案 1 :(得分:0)
答案 2 :(得分:0)
if (request()->has('query')) {
$posts = Post::where('title', 'LIKE', '%' . Request::get('query'))->with(['comments' => function ($query) {
$query->orWhere('content', 'LIKE', '%' . Request::get('query'));
}]);
} else {
$posts = Post::with('comments');
}
$posts = $posts->get();
我认为@Alexey Mezenin的答案不正确,结果将是所有评论的帖子。