Все множественные результирующие наборы, возвращаемые 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);
Объяснение
Метод 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
выполняет итерацию по коллекции и пропускает каждый значение для данного обратного вызова. Функция обратного вызова может свободно изменять элемент и возвращать его, формируя новую коллекцию измененных элементов:
$result = $data->groupBy('data_id')->map(function ($item, $key) {
// to-do
});
Метод 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
устанавливает заданный ключ и значение в коллекции:
$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
]
]