Intereting Posts
Моя ошибка SQL: попытка подключения не удалась, потому что связанная сторона неправильно ответила PHP объединяет массивы в один большой массив Изображение случайно повреждено (но загружается после обновления) и показывает «Ресурс, интерпретируемый как изображение, но переданный с типом текста MIME / html» Получить название из ссылки, PHP Простой HTML DOM Parser CodeIgniter переименуйте файл вложения электронной почты Как получить одно значение из массива PHP Как проверить конкретный тип объекта в PHP заставить PHP ждать завершения функции? Используйте $ _POST для получения входных значений на одной странице Что считается длительным временем выполнения? Несколько сеансов PHP $ PHP_AUTOCONF ошибки на mac os x 10.7.3 при попытке установки расширений pecl Как изменить URL-адрес в codelginter c # эквивалентно ассоциативному массиву php? Outlook API OAuth2 автономный доступ / постоянный доступ с использованием php

Laravel 5 Разбиение страниц с помощью Query Builder

Я делаю Laravel Pagination, основываясь на результатах моего запроса и представляю на мой взгляд. Я следую этому руководству http://laravel.com/docs/5.1/pagination, но получаю сообщение об ошибке:

Call to a member function paginate() on a non-object 

Я использую построитель запросов, поэтому думаю, что все должно быть в порядке? Вот мой код

 public function getDeliveries($date_from, $date_to) { $query = "Select order_confirmation.oc_number as oc, order_confirmation.count as cnt, order_confirmation.status as stat, order_confirmation.po_number as pon, order_summary.date_delivered as dd, order_summary.delivery_quantity as dq, order_summary.is_invoiced as iin, order_summary.filename as fn, order_summary.invoice_number as inum, order_summary.oc_idfk as ocidfk, order_summary.date_invoiced as di FROM order_confirmation,order_summary where order_confirmation.id = order_summary.oc_idfk"; if (isset($date_from)) { if (!empty($date_from)) { $query .= " and order_summary.date_delivered >= '".$date_from."'"; } } if (isset($date_to)) { if (!empty($date_to)) { $query .= " and order_summary.date_delivered <= '".$date_to."'"; } } $query.="order by order_confirmation.id ASC"; $data = DB::connection('qds106')->select($query)->paginate(15); return $data; } 

Однако, когда я удаляю пагинат (15); он отлично работает.

благодаря

    в документе на этой странице: http://laravel.com/docs/5.1/pagination мы можем видеть, что мы не вынуждены использовать красноречие.

     $users = DB::table('users')->paginate(15); 

    но, убедитесь, что вы не делаете groupBy в своем запросе, потому что метод paginate использует его.

    после того, как я не уверен, вы можете использовать paginate с построителем запросов ( select($query) )

    — редактировать

    Вы можете создать коллекцию с помощью класса paginator:

     $collection = new Collection($put_your_array_here); // Paginate $perPage = 10; // Item per page $currentPage = Input::get('page') - 1; // url.com/test?page=2 $pagedData = $collection->slice($currentPage * $perPage, $perPage)->all(); $collection= Paginator::make($pagedData, count($collection), $perPage); 

    и, на ваш взгляд, просто используйте $collection->render();

     public function getDeliveries($date_from, $date_to) { $query="your_query_here"; $deliveries = DB::select($query); $deliveries = collect($deliveries); $perPage = 10; $currentPage = \Input::get('page') ?: 1; $slice_init = ($currentPage == 1) ? 0 : (($currentPage*$perPage)-$perPage); $pagedData = $users->slice($slice_init, $perPage)->all(); $deliveries = new LengthAwarePaginator($pagedData, count($deliveries), $perPage, $currentPage); $deliveries ->setPath('set_your_link_page'); return $deliveries; } 

    Вы устанавливаете его, используя пользовательскую разбивку на страницы.

     $query = "Your Query here"; $page = 1; $perPage = 5; $query = DB::select($query); $currentPage = Input::get('page', 1) - 1; $pagedData = array_slice($query, $currentPage * $perPage, $perPage); $query = new Paginator($pagedData, count($query), $perPage); $query->setPath('Your Url'); $this->data['query'] = $query; return view('Your_view_file', $this->data, compact('query')); 

    Здесь вы можете указать путь, используя setpath() .

    В вашем представлении

     @foreach($query as $rev) //Contents @endforeach <?php echo $Reviews->appends($_REQUEST)->render(); ?> 

    Добавления appends данные.

    Спасибо.

    Paginate будет работать только с Eloquent Models. читать разбиение на страницы . вы можете перевести все ваши запросы, в том числе, если заявления в Eloquent

    это так, как я сделал, он использует построитель запросов и получает тот же результат с разбиением на страницы

     $paginateNumber = 20; $key = $this->removeAccents(strip_tags(trim($request->input('search_key', '')))); $package_id = (int)$request->input('package_id', 0); $movieHasTrailer = MovieTrailer::select('movie_id')->where('status','!=','-1')->distinct('movie_id')->get(); $movieIds = array(); foreach ($movieHasTrailer as $index => $value) { $movieIds[] = $value->movie_id; } $keyparams = array(); $packages = Package::select('package_name','id')->get(); $whereClause = [ ['movie.status', '!=', '-1'], ['movie_trailers.status', '!=', '-1'] ]; if(!empty($key)){ $whereClause[] = ['movie.title', 'like', '%'.$key.'%']; $keyparams['search_key'] = $key; } if($package_id !== 0){ $whereClause[] = ['movie.package_id', '=', $package_id]; $keyparams['package_id'] = $package_id; } $movies = DB::table('movie') ->leftJoin('movie_package','movie.package_id','=','movie_package.id') ->leftJoin('movie_trailers','movie.id','=','movie_trailers.movie_id') ->where($whereClause) ->whereIn('movie.id',$movieIds) ->select('movie.*','movie_package.package_name','movie_trailers.movie_id as movie_id', DB::raw('count(*) as total_trailers, movie_id') ) ->groupBy('movie.id') ->paginate($paginateNumber);