首页 > 解决方案 > Laravel - 带有 post 方法的数据表显示原始数据而不是表格

问题描述

我有一个审计跟踪报告,根据用户选择的日期范围显示数据。所以用户将在页面中选择范围(审计),当点击提交时将重定向到页面(审计视图)。

我想在数据表中显示数据,但在 audits_view 中,我得到的结果只是这样的原始数据

{"draw":0,"recordsTotal":490,"recordsFiltered":490,"data":[{"id":144586,"event":"created","created_at":"2021-05-19 10:28:50.660","auditable_type":"App\\Model\\Loglogin","user":null},{"id":144585,"event":"created","created_at":"2021-05-19 

这是 audits_view 刀片和控制器

       <table id="user_table" class="table table-bordered data-table">
                <thead>
                    <tr>
                        <th width="35%">auditable_type</th>
                        <th width="35%">event</th>
                    </tr>
                </thead>
         </table>
          
<script>
$(document).ready(function(){

    $('#user_table').DataTable({
        processing: true,
        serverSide: true,
        ajax: {
            url: "{{url('/')}}/report/audits",
            type: "POST",
            dataType: "json",
            'data': function ( d ) {
                d._token = "{{ csrf_token() }}";
        },
        
        columns: [
            {
                data: 'auditable_type',
                name: 'auditable_type'
            },
            {
                data: 'event',
                name: 'event'
            },
        ]
    });
  });
</script>

这是控制器

public function audits_view(Request $request)
    {
        $this->authorize('view_audit_trails');
        $user = Auth::user();
        $date1= $request->input('date1');
        $date2= $request->input('date2');

        $data = \OwenIt\Auditing\Models\Audit::with('user')
          ->select(['id', 'event', 'created_at', 'auditable_type'])
          ->whereDate('created_at','>=',$date1)>whereDate('created_at','<=',$date2)->get();
           
        return DataTables::of($data)
            ->make(true);
              
        return view('report.audits_view', compact('date1','date2','user'));

标签: phplaravelpostdatatable

解决方案


以下只是基本思想:

视图函数应该是这样的:

public function audits_view(Request $request) {
        $this->authorize('view_audit_trails');
        $user = Auth::user();
        $date1= $request->input('date1');
        $date2= $request->input('date2');
        return view('report.audits_view', compact('date1','date2','user'));
}

对于数据表,您应该创建新的发布路线,并且在该路线上,功能应该是这样的:

 public function audits_data(Request $request) {
        $date1= $request->input('date1');
        $date2= $request->input('date2');
        
        $data = \OwenIt\Auditing\Models\Audit::with('user')
      ->select(['id', 'event', 'created_at', 'auditable_type'])
      ->whereDate('created_at','>=',$date1)>whereDate('created_at','<=',$date2);
       
    return DataTables::of($data)
        ->make(true);
}

js应该是这样的:

$('#user_table').DataTable({
        processing: true,
        serverSide: true,
        ajax: {
            url: "{{url('/')}}/report/audits",
            type: "POST",
            dataType: "json",
            data: function ( d ) {
                d._token = "{{ csrf_token() }}",
                d.date1 = $('#date1').val(),
                d.date2 = $('#date2').val(),
        },
        
        columns: [
            {
                data: 'auditable_type',
                name: 'auditable_type'
            },
            {
                data: 'event',
                name: 'event'
            },
        ]
    });

推荐阅读