#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