Laravel 5 Pagination with Query Builder

前端 未结 5 1898
情歌与酒
情歌与酒 2021-01-05 10:18

I\'m making a Laravel Pagination based from my query result and be rendered in my view. I\'m following this guide http://laravel.com/docs/5.1/pagination but I get an error:<

相关标签:
5条回答
  • 2021-01-05 10:27

    If you need to hydrate, you can do this...

        $pages = DB::table('stuff')
        ->distinct()
        ->paginate(24, ['stuff.id']);
    
        $stuffs = Stuff::hydrate($pages->items());
    
        return view('stuff.index')->with('stuffs', $stuffs)->with('pages', $pages)
    

    $stuffs will contain your model object, $pages will contain your pagination, probably not the most efficient, but it works.

    0 讨论(0)
  • 2021-01-05 10:28

    You set it by using the custom pagination..

    $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'));
    

    Here you can specify the path by using the setpath().

    In your View

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

    The appends will append the data.

    Thank you.

    0 讨论(0)
  • 2021-01-05 10:31

    this is the way i did, it use query builder and get the same result with pagination

    $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);
    
    0 讨论(0)
  • 2021-01-05 10:33
    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;
     }
    
    0 讨论(0)
  • 2021-01-05 10:45

    in the doc at this page: http://laravel.com/docs/5.1/pagination we can see that we are not forced to use eloquent.

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

    but, be sure you don't make a groupBy in your query because, the paginate method uses it.

    after i'm no sure you can use paginate with query builder ( select($query) )

    --- edit

    You can create collection an use the paginator class :

    $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);
    

    and in your view just use $collection->render();

    0 讨论(0)
提交回复
热议问题