Laravel поиск имеет много отношений - PullRequest
2 голосов
/ 26 февраля 2020

У меня проблема с моим Laravel проектом. У меня есть модель пост и комментарий. Один пост имеет много комментариев, и это отношение в моем посте. Когда Когда я хочу получить все сообщения и комментарии, все прекрасно работает:

$posts = Post::with('comments')
        ->orderBy('id', 'desc')
        ->paginate(10);

У меня проблема, потому что я хочу написать поисковую систему для моделей. Я хочу получить только сообщения и только комментарии, где условие поиска комментариев, если это правда. Я пытаюсь этот код:

$posts = Post::with('comments')
        ->whereHas('comments', function($q) use($sort, $search){
            if($sort === 'answered'){
                $q->where('answered', '=', 1);
            }
            if($search){
                $q->where('content', 'like', '%'.$search.'%');
            }
        })
        ->orderBy('id', 'desc')
        ->paginate(10);

Но этот код возвращает все комментарии к публикации, а не только комментарии, где условие истинно.

1 Ответ

1 голос
/ 26 февраля 2020

Вы должны применить то же условие в with для достижения этого. Например,

$posts = Post::with(['comments' => function($q) use($sort, $search) {
       if($sort === 'answered'){
            $q->where('answered', '=', 1);
        }
        if($search){
            $q->where('content', 'like', '%'.$search.'%');
        }
    }])
    ->whereHas('comments', function($q) use($sort, $search){
        if($sort === 'answered'){
            $q->where('answered', '=', 1);
        }
        if($search){
            $q->where('content', 'like', '%'.$search.'%');
        }
    })
    ->orderBy('id', 'desc')
    ->paginate(10);

Я думаю, что это решит вашу проблему. и дайте мне знать, если он работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...