0
Eloquent Model을 사용하는 클래스를 작성하고 datatable에 대한 JSON을 출력하기 위해 조작 한 클래스를 작성했습니다. 데이터 테이블은 POST 요청을 통해 서버 측 처리를 사용합니다.where(), orderBy() 등의 Eloquent datatables
Datatable::make($_POST, new User());
그래서 User
이 인스턴스의 웅변 모델 :
namespace App\Helpers;
class Datatable {
public static $request;
public static $model;
public static $records_total;
public static $records_filtered;
static function make ($request, $model) {
self::$request = $request;
self::$model = $model;
self::setRecordsTotal();
self::filter();
self::setRecordsFiltered();
self::orderLimit();
self::renderJson();
}
// set total record count
static function setRecordsTotal() {
self::$records_total = self::$model->count();
}
// filter by search query
static function filter() {
if (!empty(self::$request['search']['value'])) {
foreach (self::$request['columns'] as $column) {
if ($column['searchable'] == 'true') {
self::$model->where($column['data'], 'LIKE', '%'.self::$request['search']['value'].'%');
}
}
}
}
// set filtered record count
static function setRecordsFiltered() {
self::$records_filtered = self::$model->count();
}
// apply order by & limit
static function orderLimit() {
self::$model->orderBy(self::$request['columns'][self::$request['order'][0]['column']], self::$request['order'][0]['dir']);
self::$model->skip(self::$request['start'])->take(self::$request['length']);
}
// render json output
static function renderJson() {
$array = [];
$array['draw'] = self::$request['draw'];
$array['recordsTotal'] = self::$records_total;
$array['recordsFiltered'] = self::$records_filtered;
$array['data'] = [];
$results = self::$model->get();
foreach ($results as $result) {
$array['data'][] = $result->toArray();
}
echo json_encode($array);
}
}
내가 클래스를 호출하는 방법입니다 : 여기
는 클래스입니다.이제 데이터 테이블의 초기 렌더링이 효과적입니다. 그러나 시도하거나 검색하거나 주문할 때 filter()
및 orderLimit()
메서드 내의 코드가 적용되지 않는 것처럼 보입니다. 정확히 동일한 결과가 똑같은 순서로 튀어 나오기 때문입니다.
내 where()
, orderBy()
등이 모델에 제대로 적용되지 않는 이유는 무엇입니까?
정적 바인딩의 원인 일뿐입니다. 확실하지 않지만 정적으로 $ model을 사용하지 않는 메소드를 다시 작성할 수 있습니다 –
$ 모델 인수로 파싱 하시겠습니까? – b0ne
이것이 전문 개발자들이 Laravel이 절차 적 프레임 워크라고 말한 이유입니다. –