与laravel-datatable中的排序和分页功能冲突

时间:2018-08-24 06:25:47

标签: php laravel yajra-datatable

我正在从事数据分析项目。我正在使用Laravel 5.6和yajra / datatable(https://github.com/yajra/laravel-datatables)库进行开发。我面临的问题如下:

首先,我从查询生成器创建了数据表:

 $querybuilder = $mydb->getQuery($expression);
 return  Datatables::of($querybuilder)->make();

但是,Datatable库的orderBy()和take()函数与$ querybuilder中的orderBy()和take()函数冲突。

例如,我的$querybuilder是根据$query->table(..)->where(..)->orderBy(second_column)->take(5)创建的

由于未事先调用get()的{​​{1}}函数,因此在将其放入$querybuilder后,查询由Datatable lib控制,以便orderBy()和take()被覆盖。

根据结果,我猜它被如下覆盖:

Datatables::of($querybuilder)->make()

此外,搜索功能也会发生这种情况。搜索功能将在表的所有记录上进行搜索,但不会在前5条记录上进行搜索。

我的解决方案在这种情况下是将 Query Builder 更改为 Collection

因此,我使用$querybuilder->orderBy(first_column)->take(10); 代替了Datatables::of($querybuilder->get())->make()

在这种情况下效果很好

很遗憾,在这种情况下,我想从数据库中获取所有数据。由于数据太大,PHP将内存不足,在将其传递给Datatable之前,我将所有这些作为 Collection 获得。如果我给数据表提供 Query Builder ,它可以通过paginate()函数处理数据量。

  

因此,有什么办法可以解决这两个问题?

我真的更喜欢将查询生成器提供给Datatable而不是Collection,因为这样可以帮助我在获取大数据时节省资源,而不是更改PHP配置中的内存限制。但是,我不知道在将其提供给Datatable后限制源查询的数据范围的解决方案。如果您知道解决方法,请帮助我。

先谢谢您

0 个答案:

没有答案