Laravel 4.2分页复杂的数据库查询

时间:2014-11-09 12:12:44

标签: php mysql laravel pdo pagination

我是Laravel 4.2的新手。

我需要在我的搜索结果页面中进行一些分页。

我正在做的是在控制器中编写此代码 -

public function getSpecials()
{
    $title = "Specials";


    $info = DB::table(DB::raw('`car` , `available_car`, `users`'))
                        ->select('car.car_maker', 'car.car_model', 'available_car.car_price', 'car.car_production_year', 'available_car.car_id', 'available_car.id', 'available_car.current_position')
                        ->where('available_car.car_id', '`car`.`car_id`')
                        ->where('available_car.is_sold', 'no')
                        ->whereRaw('`available_car`.`created_at` BETWEEN NOW() - INTERVAL 30 DAY AND NOW()')
                        ->orderByRaw('WEEK(`available_car`.`created_at`) DESC')
                        ->orderBy('available_car.car_price', 'desc')
                        ->orderBy('users.last_paid_date', 'desc')
                        ->orderBy('available_car.created_at', 'desc')
                        ->distinct()
                        ->get();

    $pagination = Paginator::make($info, count($info), 5);


    //var_dump($pagination );


    return View::make('specials',compact('pagination'))->with('info',$info)->with('title',$title);
}

我想每页显示5个项目。所以我正在做这样的分页 -

$pagination = Paginator::make($info, count($info), 5);

但这里的问题是我在页面中完美地获得了分页数。 但是,所有页面都显示整个结果,而不是仅显示5个项目。

这是输出。 (paginate每页5个项目,在我的情况下,总的没有条目是7)

First Page

Page 1

Second Page

Page 2

有人能帮帮我吗? 在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

只需对代码进行一些小改动,laravel将负责其余部分。

public function getSpecials()
{
    $title = "Specials";


    $info = DB::table(DB::raw('`car` , `available_car`, `users`'))
                        ->select('car.car_maker', 'car.car_model', 'available_car.car_price', 'car.car_production_year', 'available_car.car_id', 'available_car.id', 'available_car.current_position')
                        ->where('available_car.car_id', '`car`.`car_id`')
                        ->where('available_car.is_sold', 'no')
                        ->whereRaw('`available_car`.`created_at` BETWEEN NOW() - INTERVAL 30 DAY AND NOW()')
                        ->orderByRaw('WEEK(`available_car`.`created_at`) DESC')
                        ->orderBy('available_car.car_price', 'desc')
                        ->orderBy('users.last_paid_date', 'desc')
                        ->orderBy('available_car.created_at', 'desc')
                        ->distinct()
                        ->paginate(5);

return View::make('specials',['info' => $info, 'title' => $title]);
}
视图

中的

像这样迭代:

@if(!$info->isEmpty())

    @foreach($info as $i)
    do whatever you want
    @endforeach

@else
   no data to show....

@endif

{{$info->links()}}

答案 1 :(得分:3)

您需要手动创建您的分页器(有关详细信息,请查看此question):

$pageNumber = Input::get('page', 1);
$perPage = 5;

$info = DB::table(DB::raw('`car` , `available_car`, `users`'))
                    ->select('car.car_maker', 'car.car_model', 'available_car.car_price', 'car.car_production_year', 'available_car.car_id', 'available_car.id', 'available_car.current_position')
                    ->where('available_car.car_id', '`car`.`car_id`')
                    ->where('available_car.is_sold', 'no')
                    ->whereRaw('`available_car`.`created_at` BETWEEN NOW() - INTERVAL 30 DAY AND NOW()')
                    ->orderByRaw('WEEK(`available_car`.`created_at`) DESC')
                    ->orderBy('available_car.car_price', 'desc')
                    ->orderBy('users.last_paid_date', 'desc')
                    ->orderBy('available_car.created_at', 'desc')
                    ->distinct()
                    ->get();

$slice = array_slice($info, $perpage * ($pageNumber - 1), $perpage);
$info = Paginator::make($slice, count($info), $perPage);
return View::make('specials',['info' => $info, 'title' => $title]);

然后按照@itachi建议的foreach循环打印结果。