Разбиение на страницы Laravel 8 возвращает пустую страницу

#php #laravel

#php #laravel

Вопрос:

Разбивка на страницы возвращает пустую страницу на следующей странице. Результат будет найден, но потерян, когда я перейду на следующую страницу. Это запрос в моем контроллере

 if($request->has('SearchBtn')){
 $search = $request->input('Search');
$query = AppUser::join('suppliers', 'users.id' ,'=', 'suppliers.user_id')
->where('company', 'LIKE', "%{$search}%")
->paginate(1);
  
  if($query->isEmpty()){
    $query = AppKeywords::join('users', 'users.id' ,'=', 'keywords.user_id')
    ->join('suppliers', 'users.id' ,'=', 'suppliers.user_id')
    ->where('Keyword', 'LIKE', "%{$search}%")
    ->paginate(1);
  }
  
  return view('/Buyers/SearchResult', compact('query'));
}
  

И это dd($query)

 IlluminatePaginationLengthAwarePaginator {#1238 ▼
#total: 2
#lastPage: 2
#items: IlluminateDatabaseEloquentCollection {#1233 ▶}
#perPage: 1
#currentPage: 1
#path: "http://localhost:8000/Buyers/SearchResult"
#query: []
#fragment: null
#pageName: "page"
 onEachSide: 3
#options: array:2 [▶]
}
  

Как вы можете видеть, он находит страницы, но может отображать только первую. Я предполагаю, что это как-то связано с join тем, что запросы без него работают просто отлично paginate() . Я, честно говоря, не знаю, что попробовать или как начать отладку этого. Если я переключусь paginate() , get() все будет в порядке, и данные отображаются правильно.

Это dd($request)

 IlluminateHttpRequest {#43 ▼
 #json: null
 #convertedFiles: []
 #userResolver: Closure($guard = null) {#246 ▶}
 #routeResolver: Closure() {#255 ▶}
  attributes: SymfonyComponentHttpFoundationParameterBag {#45 ▶}
  request: SymfonyComponentHttpFoundationInputBag {#51 ▶}
  query: SymfonyComponentHttpFoundationInputBag {#51 ▶}
  server: SymfonyComponentHttpFoundationServerBag {#47 ▶}
  files: SymfonyComponentHttpFoundationFileBag {#48 ▶}
  cookies: SymfonyComponentHttpFoundationInputBag {#46 ▶}
  headers: SymfonyComponentHttpFoundationHeaderBag {#49 ▶}
 #content: null
 #languages: null
 #charsets: null
 #encodings: null
 #acceptableContentTypes: null
 #pathInfo: "/Buyers/SearchResult"
 #requestUri: "/Buyers/SearchResult?_token=RG7LzXrHaL4x2jHOoCHC3TLbUqs22XaJDjuulOCoamp;Search=companyamp;SearchBtn="
 #baseUrl: ""
 #basePath: null
 #method: "GET"
 #format: null
 #session: IlluminateSessionStore {#269 ▶}
 #locale: null
 #defaultLocale: "en"
 -preferredFormat: null
 -isHostValid: true
 -isForwardedValid: true
 -isSafeContentPreferred: null
 basePath: ""
 format: "html"
}
  

ОБНОВЛЕНИЕ 1.0:
Пустая страница была возвращена из-за этого утверждения if($request->has('SearchBtn')) , однако теперь я сталкиваюсь с новой проблемой: когда я что-то ищу, я получаю правильное количество страниц, и когда я перехожу к следующей странице, количество страниц увеличивается, и на нем отображаются все результаты из базы данных.

ОБНОВЛЕНИЕ 1.1 И я исправил это, добавив поиск к запросу следующим образом

 $query = AppUser::join('suppliers', 'users.id' ,'=', 'suppliers.user_id')
->where('company', 'LIKE', "%{$search}%")
->paginate(1)->appends(['Search'=>$search]);
  

Комментарии:

1. вы пробовали использовать leftjoin, а не просто join .

2. происходит то же самое, страницы отображаются, но возвращается пустая страница

3. выполните первый запрос на второй странице . dd также тело запроса

4. я отредактировал вопрос с помощью запроса, в то время как запрос возвращает null

5. помните, что разбивка на страницы предполагает номер страницы в параметрах запроса. Вот почему я просил вас указать тело запроса dd