我有一个大表(100K +)记录,我正在使用数据表和 Yarja。
我的查询开始于
$gp = DB::table('GoogleProspects')
->orderBy('id')
->whereNull('deleted_at')
->select([
'GoogleProspects.id as id',
'searchRequest as searchRequest',
'websiteEmail as websiteEmail',
'websiteHomePageURL as websiteHomePageURL',
'websitePhoneNr as websitePhoneNr',
'active as activeFlag'
])
->get();
但它似乎正在加载所有记录而不是分页号。
请问有什么想法吗?
这里的问题似乎是您的查询似乎正在从数据库加载所有 100K+ 记录,忽略您可能打算使用
DataTables
和 Yajra 实现的分页机制。
get()
方法会获取所有记录。
缺少分页逻辑。DataTables
库可能
未正确设置以请求分页数据。要正确集成
DataTables
和 Yajra 进行分页,您应该利用 Yajra 的内置功能来处理服务器端操作。这是 php
中的一个通用示例:
use DataTables;
//...
public function getData()
{
$query = DB::table('GoogleProspects')
->orderBy('id')
->whereNull('deleted_at')
->select([
'GoogleProspects.id as id',
'searchRequest',
'websiteEmail',
'websiteHomePageURL',
'websitePhoneNr',
'active as activeFlag'
]);
return DataTables::of($query)->make(true);
}
在你的JavaScript中:
$(document).ready(function() {
$('#your-table-id').DataTable({
"processing": true,
"serverSide": true,
"ajax": "your-server-side-url"
});
});
确保将
your-server-side-url
替换为将调用 getData()
方法的 URL。
这样做,服务器只会发回
DataTable
中每个“页面”所需的数据,而不是所有 100K+ 记录。这应该会大大加快加载时间。
确保您已在客户端正确设置 DataTables 库来处理服务器端处理,并将其配置为指向适当的服务器端 URL。