Php 雄辩的数据表不适用于where()、orderBy()等
我已经编写了一个类,它接受一个雄辩的模型并对其进行操作,以便为一个应用程序输出JSON。datatable通过POST请求使用服务器端处理 下面是课堂:Php 雄辩的数据表不适用于where()、orderBy()等,php,datatable,eloquent,Php,Datatable,Eloquent,我已经编写了一个类,它接受一个雄辩的模型并对其进行操作,以便为一个应用程序输出JSON。datatable通过POST请求使用服务器端处理 下面是课堂: namespace App\Helpers; class Datatable { public static $request; public static $model; public static $records_total; public static $records_filtered; s
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);
}
}
Datatable::make($_POST, new 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);
}
}
Datatable::make($_POST, new User());
因此,在这种情况下,User
是一个有说服力的模型
现在,datatable的初始呈现效果非常好。但是,当我尝试搜索或排序时,似乎我在filter()
和orderLimit()
方法中的代码没有被应用,因为它只是不断以完全相同的顺序输出完全相同的结果
为什么我的
where()
、orderBy()
等没有正确地应用到模型中?找到了答案。我只需要在我的make()
方法中对模型使用::query()
,例如:
self::$model=$model::query()
我想这就是静态绑定的原因。不确定,但您可以尝试重写方法以使用$model而不是statically您将什么解析为$model参数?这就是为什么专业开发人员说,Laravel是一个过程框架。我只使用了Laravel的几个包,而不是整个框架