2017-08-12 54 views
0

我遇到了有關數據表的問題。我在laravel工作並使用yajra/laravel-datatables-oracle包。Laravel Datatables分頁(當服務器端使用限制時)問題

在我的產品部分中,有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); 

Ajax響應:

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

這裏的數據是空的,我不知道如何追加,而Ajax調用數據。

當我們有大量記錄時,我如何編碼?

+0

'Product :: paginate($ take)'?檢查https://laravel.com/docs/5.4/pagination – apokryfos

+0

感謝您的快速回復,但分頁不能使用datatables.Also分頁是由datatables處理。 setTotalRecords($ count)將生成分頁鏈接。 – sunil

+0

@sunil:你檢查了[自定義過濾器](https://datatables.yajrabox.com/collection/custom-filter)嗎? –

回答

0

爲了處理大數據,你需要使用yajra-datatables服務器端處理。 在JavaScript處理是這樣的:

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

然後在路線做這樣的事情

​​

編輯:

你正在返回集合,而不是建設者。檢查這些問題在github #575#1053

+0

嗨,這不適用於我的情況,因爲它會加載產品表(Product :: all())中的所有數據。我需要根據限制來獲取記錄,如Product :: skip($ skip) - > take($ take) - > get(); – sunil

+0

不,它不會加載產品表中的所有數據。您應該在控制檯面板上檢查您的XHR請求。每次點擊分頁號碼,它都會發送一個ajax請求,並根據頁面的長度加載數據。 –

+0

快速注意,您應該使用構建器來獲得更好的結果,而不是使用集合。你應該擺脫get()方法和setTotalRecords($ count)。 –