【问题标题】:Laravel yajra table pagination server side , empty on next pageLaravel yajra 表格分页服务器端,下一页为空
【发布时间】: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 - takeoffset - limit 方法,但在下一页仍然得到空行,然后我使用 dd 调试我的代码有一些数据已经,好像不会渲染

这是我的数据表的输出

另外,这是我的调试输出(在第 2 页): 谁能帮帮我?

【问题讨论】:

  • ->orWhereHas 似乎被错误地调用了。是不是你提供的代码弄错了?
  • 已解决,这是因为我没有设置偏移量,我已将解决方案放在答案部分.. 无论如何感谢您的回答

标签: php mysql laravel datatable yajra-datatable


【解决方案1】:

已解决

我尝试对 yajra 包进行动态分析,我的数组在第 143 行文件的CollectionDataTable::paging() 上丢失:yajra/laravel-datatables-oracle/src/CollectionDataTable.php,因为我没有把setOffset

解决方案:

$dTable = DataTables()->of($model)
            ->setOffset($start)
            ->addIndexColumn()

【讨论】:

    猜你喜欢
    • 2018-06-19
    • 2022-12-10
    • 2020-02-18
    • 2016-05-04
    • 2013-07-08
    • 2023-03-10
    • 2013-11-11
    • 2015-07-15
    相关资源
    最近更新 更多