Запрос выберите имя сотрудника внутри имени менеджера в дочерней строке с данными

Кажется, мой выбор неверен. Что я хочу в таблицах данных, так это то, что у каждого имени руководителя может быть дочерняя строка, содержащая имя сотрудника. Но я получаю следующее:

{
  "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"
    },

Добавьте также пару тестовых записей базы данных.

Cerlin 24.07.2019 08:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно использовать 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.

Другие вопросы по теме