Кажется, мой выбор неверен. Что я хочу в таблицах данных, так это то, что у каждого имени руководителя может быть дочерняя строка, содержащая имя сотрудника. Но я получаю следующее:
{
"id": "2",
"name_supervisor": "Alex",
"name": "testStaff4",
"manager_id": "2",
"role_id": "1"
},
{
"id": "1",
"name_supervisor": "Andika",
"name": "testStaff1",
"manager_id": "1",
"role_id": "1"
}
Это мой запрос:
$supervisors = DB::table('supervisors')->join('users','users.manager_id','=','supervisors.id')
->select(['supervisors.id','supervisors.name_supervisor','users.name','users.manager_id','users.role_id'])
->where('users.role_id',1)
->orWhere('users.role_id',null)
->groupBy('supervisors.name_supervisor');
return Datatables::of($supervisors)->make(true);
Это мой js datatable с дочерней строкой:
function format ( d ) {
// `d` is the original data object for the row
return '<table cellpadding = "5" cellspacing = "0" border = "0" style = "padding-left:50px;">'+
'<tr>'+
'<td>Name:</td>'+
'<td>'+d.name+'</td>'+
'</tr>'+
'</table>';
}
$(document).ready(function() {
var table = $('#ajax_data').DataTable({
processing: true,
serverSide: true,
ajax: 'supervisor/json',
dom: '<"top"f>rt<"bottom"lip><"clear">',
columnDefs: [{"className": "text-center", "targets": "_all"}],
columns: [
{
"className": 'details-control',
"orderable": false,
"data": null,
"defaultContent": ''
},
{ data: 'name_supervisor', name: 'supervisors.name_supervisor' }
]
});
} );
У меня есть manager_id в таблице пользователей, которая является внешним ключом из таблицы supervisors. Я хочу получить вывод json следующим образом:
{
"id": "1",
"name_supervisor": "Andika",
"name": "testStaff1","testStaff2","testStaff3"
"manager_id": "1",
"role_id": "1"
},



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно использовать GROUP CONCAT для имени пользователя, как показано ниже.
$supervisors = DB::table('supervisors')->join('users','users.manager_id','=','supervisors.id')
->select(['supervisors.id','supervisors.name_supervisor',DB::raw('GROUP_CONCAT(users.name) as name'),'users.manager_id','users.role_id'])
->where('users.role_id',1)
->orWhere('users.role_id',null)
->groupBy('supervisors.name_supervisor');
return Datatables::of($supervisors)->make(true);
Вы можете видеть, что имя сгруппировано с помощью функции Group_Concat, и у вас есть больше возможностей для разделителя и упорядочения по классам, чтобы оно соответствовало вашим потребностям.
Обратитесь к Модель запросов Laravel, чтобы использовать агрегатные или строковые функции, поскольку вы можете использовать его для запроса mysql.
Добавьте также пару тестовых записей базы данных.