laravel нумерация страниц не работает с поиском - PullRequest
2 голосов
/ 13 апреля 2020

у меня есть этот код в моем контроллере

  if (request('tag')) {
            $Posts = Tags::where('name' ,request('tag'))->firstOrFail()->Posts;
        } else {
            $Posts = Blog::paginate(10);
        }
        return view('Panel.Posts',['Posts' => $Posts]);

, и это моя модель функции

public function tag(){
        return $this->belongsToMany(Tags::class,'Post_tag','Post_id');
    }

Это веб-приложение, которое я создаю, и это блог. Я пытаюсь создать категорию. Я хочу разбить свой метод поиска на страницы, но не могу этого сделать. Если я использую метод paginate, он говорит, что в paginate нет связи между записями. Я пробовал это:
$Posts = Tags::where('name' ,request('tag'))->firstOrFail()->paginate(10)->Posts;
и это
$Posts = Tags::where('name' ,request('tag'))->firstOrFail()->Posts->paginate(10);
Может ли кто-нибудь помочь мне исправить это?

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

попробуйте мой код


 $Posts = Blog::whereHas('tag', function (Builder $query) {
                    $query->where('name', request('tag'));
                })->paginate(25);

вы можете указать, где ha и построитель запросов устанавливают связь в моделях

1 голос
/ 13 апреля 2020

Убедитесь, что теги имеют отношение в модели. Также используйте -> сообщения вместо -> Сообщения, но в любом случае:

Нет смысла использовать отдельный запрос, если отношение определено или нет. Вместо этого вам нужна комбинация когда и где.

$posts = Blog::when(request('tag'), function ($q, $tagName) {
      return $q->whereHas('tag', function ($q) use ($tagName) {
         return $q->where('name', $tagName);
      });
   })->paginate(10);
  1. При заполнении примените то, что внутри него, если условие будет соответствовать. Так что это просто заменить «если». Документы https://laravel.com/docs/7.x/queries#conditional -классы

  2. WhereHas проверит, существует ли модель отношения, и позволит вам использовать «где» (или другие запросы) для этого отношения. Документы https://laravel.com/docs/7.x/eloquent-relationships#querying -relationhip-существование

Если вы все еще хотите использовать "if" nad not "when":

$posts = Blog::query();
if (request('tag')) {
   $posts = $posts->whereHas('tag', function ($q) {
      return $q->where('name', request('tag'));
   });
}
$posts = $posts->paginate(10);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...