0

我遇到了有关数据表的问题。我在 laravel 中工作并使用过yajra/laravel-datatables-oracle包。

在我的一个产品部分中,有 100-200k 条记录。当我点击我的产品列表时,加载需要很长时间,因为我从数据库中获取所有记录。

我正在尝试根据限制获取记录,但这会在分页和搜索中产生问题。只有一个分页链接有效,所有其他页面返回空数据。

下面是我的服务器端代码:

$skip = $request->get('start') != null ? $request->get('start') : 0;
$take = $request->get('length') != null ? $request->get('length') : 10;
$products = Product::skip($skip)->take($take)->get();
$count = Product::get()->count();   
return Datatables::of($products)->setTotalRecords($count)->make(true); 

阿贾克斯响应:

{"draw":2,"recordsTotal":121,"recordsFiltered":121,"data":[],

这里数据是空的,我不知道如何在 ajax 调用时附加数据。

当我们有大量记录时我如何编码?

4

2 回答 2

0

使用您的限制值传递一个变量名length。前任。:

$('#tasks-table').on('preXhr.dt', function (e, settings, data) {
        data['employee'] = $('#employeeId').val();
        data['length'] = 20; //This is the pagination limit data variable
});
于 2020-11-26T07:10:33.270 回答
0

要处理大数据,您需要使用 yajra-datatables 服务器端处理。在你的 javascript 句柄中是这样的:

<script>
$(document).ready(function() {
    $('.datatable').DataTable({
        processing: true,
        serverSide: true,
        ajax: '{{ route(' serverSide ') }}',
        columns: [
          {data: 'name', name: 'name'}
        ]
    });
});

然后在路线上做这样的事情

    Route::get('/serverSide', function () {
        $products = Product::all();
        return Datatables::of($products)->make(true);
         })->name('serverside');

编辑:

您正在返回集合而不是生成器。在 github #575#1053中检查这些问题

于 2017-08-12T09:08:29.897 回答