laravel中的数据表分页

时间:2017-06-16 10:14:54

标签: laravel laravel-5

我正在使用laravel 5.0 我也使用datatable jquery插件来显示网格。

控制器mehtod

 public function index() {

    $jobs = \App\Job::orderBy('created_at', 'DESC')->limit(1000)->get();

    return View::make('jobs.index', ['jobs' => $jobs]);
}

问题: 现在我将 - > limit(1000)硬编码为数据表网格中的1000个作业进行显示 它,但我有超过1000条记录要显示。

我想要什么? 我想用网格显示500条记录,然后显示500条记录。 我不确定是否有可用的回调数据表插件功能? 我需要一种动态的方式来加载下一个500

注意: 我不愿意这种滚动解决方案 https://datatables.net/extensions/scroller/examples/initialisation/server-side_processing.html

3 个答案:

答案 0 :(得分:2)

您可以使用ajax数据源:

请访问:https://datatables.net/examples/ajax/objects.html

示例PHP脚本:

// function will process the ajax request
public function getMembers(Request $request) {

        $draw = $request->get('draw');
        $start = $request->get('start');
        $length = $request->get('length');


        $search = (isset($filter['value']))? $filter['value'] : false;

        $total_members = 1000; // get your total no of data;
        $members = $this->methodToGetMembers($start, $length); //supply start and length of the table data

        $data = array(
            'draw' => $draw,
            'recordsTotal' => $total_members,
            'recordsFiltered' => $total_members,
            'data' => $members,
        );

        echo json_encode($data);
    }

示例JavaScript:

$('#all-member-table').DataTable( {
        "processing": true,
        "serverSide": true,
        "ajax": {
            url: base_url+"ajax/members"
            },
            "columns": [
            { data: '1' },
            { data: '2' },
            { data: '3' },
            { data: '4' },
            { data: '5' },
        ]
    } );

示例HTML:

<table id="all-member-table">
            <thead>
                <tr>
                    <th>Column1</th>
                    <th>Column2</th>
                    <th>Column3</th>
                    <th>Column4</th>
                    <th>Column5</th>
                </tr>
            </thead>
  </table> 

答案 1 :(得分:2)

我认为以上答案应扩展为搜索功能。

更新答案;

$filter = $request->get('search');
$search = (isset($filter['value']))? $filter['value'] : false;
where('somecolumnonyourdb','like', '%'.$search.'%')

这对我有用

答案 2 :(得分:0)

您可以使用standard pagination

$jobs = \App\Job::latest()->paginate(500);

create it manually