【发布时间】:2021-02-14 20:52:00
【问题描述】:
我有数千条记录,在解决它时感觉很慢,因为它会导致在前端处理的 yajra 上出现分页。所以我试图改进我的代码。它呈现得很快,但是当我点击下一页时,表格显示我的数据是空的。
这是我的尝试:
$model = Order::with([
'buyer',
'order_details.order_domain',
'order_details.custom_vps',
'order_details.custom_hosting',
'order_details.custom_mail',
'order_details.bill',
'bill'
]);
$totalData = $model->count();
$totalFiltered = $totalData;
->orWhereHas('order_detail.custom_hosting', function (&$q) {
$q->where('is_upgrade',1);
})
->orWhereHas('order_detail.custom_vps', function (&$q) {
$q->where('is_upgrade',1);
})
->orWhereHas('order_detail.custom_mail', function (&$q) {
$q->where('is_upgrade',1);
});
$limit = ($request->length) ? $request->length : 10;
$start = ($request->start) ? $request->start : 0;
$model = $model->skip($start)->take($limit)->get();
$dTable = DataTables()->of($model)
->addIndexColumn()
->editColumn('order_code',function($data){
return $data->order_code;
})
->editColumn('created_at',function($data){
return date('d F Y',strtotime($data->created_at));
})
//blablabla....
->rawColumns(['status','action'])
->with(['recordsTotal'=>$totalData, "recordsFiltered" => $totalFiltered,'start' => $start]);
return $dTable->make(true);
我尝试了 skip - take 和 offset - limit 方法,但在下一页仍然得到空行,然后我使用 dd 调试我的代码有一些数据已经,好像不会渲染
【问题讨论】:
-
->orWhereHas似乎被错误地调用了。是不是你提供的代码弄错了? -
已解决,这是因为我没有设置偏移量,我已将解决方案放在答案部分.. 无论如何感谢您的回答
标签: php mysql laravel datatable yajra-datatable