Получить данные в одной строке (ключ - значение) - PullRequest
0 голосов
/ 24 февраля 2020

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

У меня есть такая база данных в mysql

id  -   data_id      -      name            -    Value
----------------------------------------------------------------------------------------
1   -       2        -      your-name       -     Bilal
----------------------------------------------------------------------------------------
1   -       2        -      your-email      -     bilal@gmail.com
----------------------------------------------------------------------------------------
1   -       2        -      your-city       -     Toronto
----------------------------------------------------------------------------------------
1   -       3        -      your-name       -     Hassan
----------------------------------------------------------------------------------------
1   -       3        -      your-email      -     hassan@gmail.com
----------------------------------------------------------------------------------------
1   -       3        -      your-city       -     Toronto
---------------------------------------------------------------------------------------

Я хочу получить запись следующим образом:

Data_id     -   Name             Email           -           City
---------------------------------------------------------------------------------------
2   -       Bilal         bilal@gmail.com              Toronto
---------------------------------------------------------------------------------------
3   -       Hassan        hassan@gmail.com             Toronto
---------------------------------------------------------------------------------------

Любой может помочь, пожалуйста, как получить те же идентификаторы в одну строку и показать во 2-й таблице

1 Ответ

0 голосов
/ 24 февраля 2020

Все множественные результирующие наборы, возвращаемые Eloquent, являются экземплярами объекта Illuminate\Database\Eloquent\Collection, включая результаты, полученные с помощью метода get или доступные через отношение.

Класс Illuminate\Support\Collection предоставляет свободную и удобную оболочку для работы с массивами данных.

$result = $data->groupBy('data_id')->map(function ($item, $key) {
    $return = $item->pluck('value', 'name');
    $return->put('data_id', $key);

    return $return;
});

dd($result);

Объяснение

grupBy()

Метод groupBy группирует элементы коллекции по заданному ключу:

$result = $data->groupBy('data_id');

Результат

array:2 [
  2 => array:3 [
    0 => array:4 [
      "id" => 1
      "data_id" => 2
      "name" => "your-name"
      "value" => "Bilal"
    ]
    1 => array:4 [
      "id" => 1
      "data_id" => 2
      "name" => "your-email"
      "value" => "bilal@gmail.com"
    ]
    2 => array:4 [
      "id" => 1
      "data_id" => 2
      "name" => "your-city"
      "value" => "Toronto"
    ]
  ]
  3 => array:3 [
    0 => array:4 [
      "id" => 1
      "data_id" => 3
      "name" => "your-name"
      "value" => "Hassan"
    ]
    1 => array:4 [
      "id" => 1
      "data_id" => 3
      "name" => "your-email"
      "value" => "hassan@gmail.com"
    ]
    2 => array:4 [
      "id" => 1
      "data_id" => 3
      "name" => "your-city"
      "value" => "Toronto"
    ]
  ]
]

map()

Метод map выполняет итерацию по коллекции и пропускает каждый значение для данного обратного вызова. Функция обратного вызова может свободно изменять элемент и возвращать его, формируя новую коллекцию измененных элементов:

$result = $data->groupBy('data_id')->map(function ($item, $key) {
    // to-do
});

pluck()

Метод pluck извлекает все значения для данного ключа:

$result = $data->groupBy('data_id')->map(function ($item, $key) {
    return $item->pluck('value', 'name');
});

Результат

array:2 [
  2 => array:3 [
    "your-name" => "Bilal"
    "your-email" => "bilal@gmail.com"
    "your-city" => "Toronto"
  ]
  3 => array:3 [
    "your-name" => "Hassan"
    "your-email" => "hassan@gmail.com"
    "your-city" => "Toronto"
  ]
]

put()

Метод put устанавливает заданный ключ и значение в коллекции:

$result = $data->groupBy('data_id')->map(function ($item, $key) {
    $return = $item->pluck('value', 'name');
    $return->put('data_id', $key);

    return $return;
});

Результат

array:2 [
  2 => array:4 [
    "your-name" => "Bilal"
    "your-email" => "bilal@gmail.com"
    "your-city" => "Toronto"
    "data_id" => 2
  ]
  3 => array:4 [
    "your-name" => "Hassan"
    "your-email" => "hassan@gmail.com"
    "your-city" => "Toronto"
    "data_id" => 3
  ]
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...