0

我有这个Json文件已传递到我的视图中。我想要的只是将该Json文件插入到我的Yajra Datatable.

这是我Json Data传入 my的示例http://127.0.0.1:8000/resolution_time_of_calls

{"draw":0,"recordsTotal":205,"recordsFiltered":205,"data":[{"Month":"1","Name":"Analytics Team","Total":"422","AVG":"211.0000","MAX":"212"},{"Month":"1","Name":"Assembly Team","Total":"823","AVG":"137.1667","MAX":"502"},{"Month":"1","Name":"Big Data Team","Total":"5131","AVG":"570.1111","MAX":"985"},{"Month":"1","Name":"Business Intelligence Team","Total":"5706","AVG":"713.2500","MAX":"1127"},{"Month":"1","Name":"Data Security Team","Total":"57703","AVG":"663.2529","MAX":"4463"},{"Month":"1","Name":"Data Security-SouthPH","Total":null,"AVG":null,"MAX":null},{"Month":"1","Name":"Deskside Team","Total":"34841","AVG":"305.6228","MAX":"1498"},{"Month":"1","Name":"Development and Testing

这是我resolution_time_of_calls认为的代码

<table class="table table-bordered" id="table">
        <thead>
           <tr>
              <th>Id</th>
              <th>Name</th>
              <th>Email</th>
           </tr>
        </thead>
</table>


<script>
        $(function() {
            $('#table').DataTable({
            processing: true,
            serverSide: true,
            ajax: '{{ url('getData') }}',
            columns: [
                     { data: 'Month', name: 'id' },
                     { data: 'Name', name: 'name' },
                     { data: 'Total', name: 'email' }
                  ]
         });
      });
</script>

这是我的路线:

Route::get('resolution_time_of_calls', 'DisplayDataController@getData');

我的DisplayDataController控制器:

class DisplayDataController extends Controller

{

  function getData(){

    return datatables(DB::select("SELECT DISTINCT MONTH(DATE_ADD(T.Created, INTERVAL 8 HOUR)) AS Month ,Q. Name 
    ,SUM(TIMESTAMPDIFF(HOUR,T.Created,O.Created)) AS Total
    ,AVG(TIMESTAMPDIFF(HOUR,T.Created,O.Created)) AS AVG
    ,MAX(TIMESTAMPDIFF(HOUR,T.Created,O.Created)) AS MAX                        
    FROM rtdb.Tickets T
    LEFT JOIN rtdb.Queues Q ON Q.id=T.Queue
    LEFT JOIN rtdb.ObjectCustomFieldValues O ON O.ObjectId=T.EffectiveId 
    AND O.CustomField=15 AND O.ObjectType='RT::Ticket' AND O.Disabled=0
    WHERE T.Status!='Deleted' AND T.IsMerged IS NULL AND T.Type='ticket' 
    GROUP BY MONTH(DATE_ADD(T.Created, INTERVAL 8 HOUR)),Q.Name Order by Month asc                                    
        "))->toJson();
  }
}

我希望在我的数据表中有这种输出:

Month| Name |Total 1 | team a | 100 2 | team b | 200

谢谢!!!

4

1 回答 1

1

将控制器功能更改为:

function getData(){

   return Datatables::of(
      DB::select("SELECT DISTINCT MONTH(DATE_ADD(T.Created, INTERVAL 8 HOUR)) AS Month ,Q. Name 
      ,SUM(TIMESTAMPDIFF(HOUR,T.Created,O.Created)) AS Total
      ,AVG(TIMESTAMPDIFF(HOUR,T.Created,O.Created)) AS AVG
      ,MAX(TIMESTAMPDIFF(HOUR,T.Created,O.Created)) AS MAX                        
      FROM rtdb.Tickets T
      LEFT JOIN rtdb.Queues Q ON Q.id=T.Queue
      LEFT JOIN rtdb.ObjectCustomFieldValues O ON O.ObjectId=T.EffectiveId 
      AND O.CustomField=15 AND O.ObjectType='RT::Ticket' AND O.Disabled=0
      WHERE T.Status!='Deleted' AND T.IsMerged IS NULL AND T.Type='ticket' 
      GROUP BY MONTH(DATE_ADD(T.Created, INTERVAL 8 HOUR)),Q.Name Order by Month asc")
  )->make(true);
}

确保在控制器类的顶部包含以下内容:

use Yajra\Datatables\Datatables;

数据表初始化

我还将在文档就绪侦听器中包含 dataTable 加载(除非您在不同的事件上加载表):

这将是您的table.blade.php文件(显然缺少很多 html,但这只是一个示例):

<table class="table table-bordered" id="table">
        <thead>
           <tr>
              <th>Id</th>
              <th>Name</th>
              <th>Email</th>
           </tr>
        </thead>
</table>

<script>
        $(document).ready(function(){
            $('#table').DataTable({
            processing: true,
            serverSide: true,
            ajax: '{{ route('getData') }}',
            columns: [
                     { data: 'Month', name: 'id' },
                     { data: 'Name', name: 'name' },
                     { data: 'Total', name: 'email' }
                  ]
         });
      });
</script>

仅供参考 - 如果您希望服务器完成所有的排序和搜索工作,您只需要 serverSide: 设置为 True 。它可以设置为 False 并且仍然使用 ajax 来拉入初始数据。但是,对于非常大的表,最好将其设置为 true。

ALSO - 列数组 - 数据是要放入列的键的名称。请务必在此处按正确的顺序放置列。name 是设置服务器端处理时的数据库列名称。

路线:

由于我使用了路由,因此请务必在 web.php 文件中为 ajax 查询设置路由:

Route::get('resolutiondata', 'DisplayDataController@getData')->name('getData');

以及您显示视图的路线:

Route::get('resolution_time_of_calls', function () {
    return view('table');
});

上述路线假定您的视图(table.blade.php)位于文件夹 /resources/views/table.blade.php

于 2019-01-22T08:29:44.267 回答