У меня проблема с моей поисковой системой в Laravel. У меня есть 3 модели: Post, Comment и CommentUser.
Мои отношения таковы: у Post много комментариев, и у комментария есть один пользователь. Я хочу создать поиск для этих отношений. Теперь у меня есть следующий код:
$posts = Post::where('page_id', Auth::user()->page)
->with([
'comments' => function($q) use($sort, $search) {
if($search){
$q->where('content', 'like', '%'.$search.'%');
}
if($sort == 'answered'){
$q->where('answered', '=', 1);
}
if($sort == 'new'){
$q->where('answered', '=', 0);
}
},
'comments.user' => function($q) use($sort, $search) {
if($search){
$q->where('name', 'like', '%'.$search.'%')
->orWhere('lastname', 'like', '%'.$search.'%');
}
},
])
->whereHas('comments', function($q) use($sort, $search){
if($search){
$q->where('content', 'like', '%'.$search.'%');
}
if($sort == 'answered'){
$q->where('answered', '=', 1);
}
if($sort == 'new'){
$q->where('answered', '=', 0);
}
})
->orWhereHas('comments.user', function($q) use($search){
if($search){
$q->where('name', 'like', '%'.$search.'%')
->orWhere('lastname', 'like', '%'.$search.'%');
}
})
->orderBy('created_at', 'asc')
->paginate(10);
Я пытаюсь использовать next с и orWhereHas, но не работает, потому что, например, когда у меня есть комментарии, такие как "наилучшие пожелания", у меня нет пользователя с этим именем или фамилия и наоборот. Я хочу, чтобы поисковые посты поиска, где содержание комментариев похоже на поисковый запрос, или посты, где имя пользователя или фамилия похожи на поисковый запрос, но теперь два варианта не принимаются.