Как поместить файл Json в таблицы данных (яджру) в Laravel - PullRequest
0 голосов
/ 22 января 2019

У меня есть этот 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');

Мой 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

Спасибо !!!

1 Ответ

0 голосов
/ 22 января 2019

Измените функцию контроллера на:

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.

ТАКЖЕ - Массив столбцов - данные - это имя ключа, который нужно вставить в столбец. Обязательно разместите столбцы в правильном порядке здесь. name - это имя столбца базы данных для настройки обработки serverSide.

Маршрут:

Поскольку я использовал маршрут, также обязательно настройте маршрут в файле 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

.
...