2017-04-14 4 views
0

Laravel 5.2에서 Yajra 데이터 테이블을 사용하여 db 테이블을로드 중입니다. 내 테이블에 50K 이상의 레코드가 포함되어 있으므로 get() 메서드는 많은 메모리를 사용합니다. 그러나, 나는이 paginate() 방법을 사용하여 오류가 발생합니다 방법 getQuery이 존재하지 않습니다 Macroable.php 라인 (74)에왜 페이지 매김이 Laravel 5.2의 Yajra 데이터 테이블과 작동하지 않는가 012

BadMethodCallException.

코드는 다음과 같습니다 당신은 기본적으로 컬렉션 작업 paginate() 전화하면

$required_orders = Order::where('order_status','Delivered')->paginate(); 
return Datatables::of($required_orders)->make(true); 

답변

0

Datatables 일반적으로하는 QueryBuilder 객체가 필요합니다. Datatables::collection()을 사용할 수는 있지만 원하지 않는 데이터베이스에서 모든 것을 가져와야하므로 원하지 않습니다.

yajra를 사용하면 페이지 매김에 ajax 호출을 사용해야하며 Laravel이 아닌 페이지 매김을 처리하므로 QueryBuilder가 페이지 매김 된 데이터와 메타 데이터를 반환하기 위해 개수 등을 수행해야합니다.

최선의 선택 별도의 데이터 테이블 (API) 경로를 생성하고, datatables.net server side processing

편집 확인하는 것입니다 :

: 당신이 그런 짓을 할 것입니다 처리하는 서버 측의 예를 다음

$(document).ready(function() { 
    $('#yourDatatableId').DataTable({ 
     "processing": true, 
     "serverSide": true, 
     "ajax": "/api/datatables/order" 
    }); 
}); 

과 같은 경로를 반환 뭔가하자

$builder = Order::where('order_status', 'Delivered'); 

return Datatables::of($builder)->make(true); 

HTML 부분에 대해서는 예제를 확인하십시오. 기본적으로 자바 스크립트에서 열을 정의하면 반환 된 데이터에서 행이 채워집니다. 또한 체크 아웃 datatables server side manual, 거기에 startlength, 프런트 엔드 datatables lib에 의해 페이지 매김에 사용됩니다 볼 수 있습니다.

+0

안녕하세요 Robert! 귀하의 답변에 감사드립니다. 당신은 너무 많은 메모리를 소비하지 않고 효율적으로 100K 레코드를 검색하고 나열하는 방법을 제안 해 주시겠습니까? –

+0

@AliHamza 업데이트 된 답변보기 – Robert

+0

! 위에서 언급 한 절차를 시도했지만 문제는이 명령을 실행할 때 "$ builder = Order :: where ('order_status', 'Delivered');"입니다. , 그것은 50K 이상의 레코드가 있기 때문에 많은 메모리를 소비합니다. laravel 5.2에서이 문제를 어떻게 극복 할 수 있습니까? –

관련 문제