jQuery DataTables Мастер / Подробности (дочерние строки) в виде частичного просмотра laravel

У меня есть приложение Laravel, где я использую jQuery DataTables ( yajra / datatables laravel plugin ) для отображения некоторых записей. Я также использую 3 дочерние строки для отображения более подробной информации для них. В дочерних строках я показываю некоторую дополнительную информацию, график с годовыми данными содержимого и значениями записи за последние 6 месяцев. Проблема в том, что я не могу заполнить последние 2 дочерние строки данными, как я заполнил первый, потому что я не могу поместить все данные внутри 1 запроса.

Вот методы контроллера, которые питают DataTable

public function getRowDetails() { return view('reports.creates', compact('data')); } public function getRowDetailsData() { $kpi = $this->getUserActiveKpi(); $data = DB::table('reports') ->orderBy('month','desc') ->groupBy('kpi_id') ->take(5) ->get(); return Datatables::of($kpi, $data) ->make(true); } private function getUserActiveKpi(){ $user = Auth::user(); $kpis = DB::table('kpis') ->where('kpi_status',1) ->where('responsible_user', $user->id); return $kpis; } 

это скрипт инициализации:

 $(document).ready(function () { var table; table = $('#monthly_table').DataTable({ processing: true, serverSide: true, dom: "fr<'clear'>Ttip", ajax: '{{ url("reports/row-details-data") }}', tableTools: {.....}, columns: [.....], order: [[1, 'asc']] }); }); 

вот функции, возвращающие данные дочерних строк:

 var kpi; function kpi_info(d) { // `d` is the original data object for the row return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+ '<tr>' + '<td>KPI:</td>' + '<td>' + d.kpi_code + '</td>' + '</tr>' + '<tr>' + '<td>Workload:</td>' + '<td>' + d.kpi_workload + '</td>' + '</tr>' + '<tr>' + '<td>KPI Description:</td>' + '<td>'+ d.kpi_description + '</td>' + '</tr>' + '</table>' } function kpi_values(d) { // `d` is the original data object for the row kpi = d.id; // it returns the id, here I want to return the partial view // that contains the data using the *kpi* as a parameter return kpi; } function kpi_graph(d) { kpi = d.id; // it returns the id, here I want to return the partial view that // contains the graph using the *kpi* as a parameter return kpi; } 

и вот функция, чтобы показать их:

 $('#monthly_table tbody').on('click', 'td.details-control', function () { var tr = $(this).closest('tr'); var row = table.row(tr); if (row.child.isShown()) { // This row is already open - close it row.child.hide(); tr.removeClass('shown'); } else { // Open this row row.child(kpi_data(row.data())).show(); tr.addClass('shown'); } }); 

Теперь я пытаюсь добиться того, что, когда я нажимаю одну из ссылок, показывающую дочерний поток, kpi параметр kpi на следующий метод контроллера

 public function data($id){ $data = DB::table('reports') ->where('kpi_id',$id) ->orderBy('month','desc') ->take(5) ->get(); return view('reports.data', compact('data')); } по public function data($id){ $data = DB::table('reports') ->where('kpi_id',$id) ->orderBy('month','desc') ->take(5) ->get(); return view('reports.data', compact('data')); } 

Если есть что-то еще, что вы должны знать, спросите, и вся помощь приветствуется

РЕДАКТИРОВАТЬ

говоря, что I cannot put all the data inside 1 query я имею в виду, что мне нужно объединить 3 запроса для этого. Первое:

 DB::table('kpis') ->where('kpi_status',1) ->where('responsible_user', $user->id); 

Второй:

 DB::table('reports') ->where('kpi_id',$id) ->orderBy('month','desc') ->take(5) ->get(); по DB::table('reports') ->where('kpi_id',$id) ->orderBy('month','desc') ->take(5) ->get(); 

И третий:

 DB::table('reports') ->where('reports.is_validated',1) ->where('reports.year',$current_year) ->orderBy('month','asc') ->get(); по DB::table('reports') ->where('reports.is_validated',1) ->where('reports.year',$current_year) ->orderBy('month','asc') ->get(); 

Я не могу думать о запросе, который может получить все эти данные сразу.

Заметка

есть еще один запрос, такой как последний с параметром $prev_year .

EDIT 2

 Schema::create('kpis', function(Blueprint $table) { $table->increments('id'); $table->string('kpi_code'); $table->string('kpi_description'); }); Schema::create('reports', function(Blueprint $table) { $table->increments('id'); $table->integer('kpi_id')->unsigned()->nullable(); //fk kpi -> values $table->float('value'); $table->integer('month',false,false,'2'); $table->integer('year',false,false,'4'); }); Schema::table('reports', function($table){ $table->foreign('kpi_id')->references('id')->on('kpis'); });