代码之家  ›  专栏  ›  技术社区  ›  Ali

当serverSide为true时,使用yajra Datatable在laravel中导出包含100万条记录的Excel

  •  0
  • Ali  · 技术社区  · 3 年前

    我想用yajra Datatable下载excel

    这是我的刀片文件代码:

    var oTable = $('#datatable_rows').DataTable({
    
                "dom": '<"top"if>rt<"bottom"lBp><"clear">',
                processing: true,
                serverSide: true,
                buttons : [{
                    extend : 'excel',
                    text : '<i class="flaticon2-download"></i>',
                    title : '',
                    className: "btn export",
                    filename : '13xyz-export',
                    exportOptions : {
                        page : 'all',
                    }
                }],
                searchable: true,
    
                scrollX: true,
                bSort: false,
    
                pageLength: 500,
                lengthMenu: [10, 25, 50, 100, 500, 10000],
    
                ajax: {
                    url:'{{ route('xyz.index') }}',
                    data: function(d) {
                        d.client_name=$('#client_name').val(),
                        d.orderby=$('#hidden_field').val(),
                        d.asc_desc=$('#asc_desc').val()
                    }
                },
                ordering:false,
                columns: [
                
    
                {
                    searching: true,
    
                    data: "xyz0"
    
                },
    
                {
                    searching: true,
    
                    data: "xyz1"
    
                },
    
                {
                    searching: true,
    
                    data: "xyz2"
    
                },
    
                {
                    searching: true,
    
                    data: "xyz3"
    
                },
    
                {
    
                    searching: true,
    
                    "data": 'action',
    
                },
    
    
    
                ]
    
            });
    

    控制器

    if ($request->ajax())
    {
    $query = Xyz::select('*')->orderby($request->orderby , $asc_desc)->latest();
    
    return Datatables::of($query)
    
                ->addColumn('action', function ($row) {
                    $btn = view('layout.editAction')->with(['ID' => $row->ID, 'route' => 'xuz', 'per_value'=>'myxyz'])->render();
                    return $btn;
                })
                ->addColumn('checkbox', function ($row) {
                    $chk = view('layout.checkbox')->with(['ID' => $row->ID])->render();
                    return $chk;
                })
               
                ->setRowClass(function () {
                    return 'row-move';
                })
                ->setRowId(function ($row) {
                    return 'row-' . $row->ID;
                })
                ->rawColumns(['action','checkbox'])
                ->make(true);
    }
    return view($this->view . '.index');
    

    如果我能 服务器端为假 当500个请求超时时,它将出错。 如果我使用 服务器端为真 它立即给出所有数据,但当我在excel中导出文件时,它只给出当前页面记录。

    当我按下excel按钮时,我想下载所有记录

    0 回复  |  直到 3 年前