【问题标题】:How to put Json file into datatables(yajra) in Laravel如何将 Json 文件放入 Laravel 中的数据表(yajra)
【发布时间】:2019-06-15 15:58:59
【问题描述】:

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

这是我的Json Data 传递到我的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');

我的DisplayDataControllercontroller:

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

谢谢!!!

【问题讨论】:

    标签: arrays json laravel-5 datatables yajra-datatable


    【解决方案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;
    

    数据表初始化

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

    这将是您的 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中

    【讨论】:

    • 我尝试了你所有的答案,但它仍然返回 Json 数据
    • 返回Json数据是什么意思?您收到错误消息吗?
    • 没有。它仍然返回 Json 数据,而不是包含数据表的页面。
    • 嗯好的,那你还需要为视图创建一个路由。我会更新我的答案
    • 当我在路由中使用此代码时,它会返回页面但数据表为空Route::get('resolution_time_of_calls/getData', 'DisplayDataController@getData')-&gt;name('getData');
    猜你喜欢
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2018-04-26
    • 2021-12-31
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多