Php 雄辩的数据表不适用于where()、orderBy()等

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

我已经编写了一个类,它接受一个雄辩的模型并对其进行操作,以便为一个应用程序输出JSON。datatable通过POST请求使用服务器端处理

下面是课堂:

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的几个包,而不是整个框架