I have tried many stackoverflow solutions, but no luck.
I have a table called driver_zones
and there are multiple zone_id
with same value but different driver_id
so I want to merge zone_id
with same value and want to attach all the driver_id
of it.
I want query in laravel.
Below is my table (first and second zone_id
has same value):
driver_id | zone_id |
---|---|
sJUfNMZ2nJ | 6b3ecb1b-c29d-45b2-88b3-dabf5c8b6b62 |
rz8lpiagH1 | 6b3ecb1b-c29d-45b2-88b3-dabf5c8b6b62 |
qY8ynd7tX5 | 5aec1540-b62c-43e3-9182-23a89da610d1 |
And the result I want is:
Array
(
[0] => Array
(
[zone_id] => 6b3ecb1b-c29d-45b2-88b3-dabf5c8b6b62
[drivers] => Array
(
[0] => Array
(
[id] => 2
[uuid] => sJUfNMZ2nJ
)
[1] => Array
(
[uuid] => rz8lpiagH1
)
)
)
[1] => Array
(
[zone_id] => 5aec1540-b62c-43e3-9182-23a89da610d1
[drivers] => Array
(
[0] => Array
(
[uuid] => qY8ynd7tX5
)
)
)
)
You want to use groupBy()
> $c = collect([['driver'=>'sJUfNMZ2nJ', 'zone'=>'6b3ecb1b-c29d-45b2-88b3-dabf5c8b6b62'],['driver'=>'rz8lpiagH1', 'zone'
=>'6b3ecb1b-c29d-45b2-88b3-dabf5c8b6b62'],['driver'=>'qY8ynd7tX5', 'zone'=>'5aec1540-b62c-43e3-9182-23a89da610d1']])
= Illuminate\Support\Collection {#8586
all: [
[
"driver" => "sJUfNMZ2nJ",
"zone" => "6b3ecb1b-c29d-45b2-88b3-dabf5c8b6b62",
],
[
"driver" => "rz8lpiagH1",
"zone" => "6b3ecb1b-c29d-45b2-88b3-dabf5c8b6b62",
],
[
"driver" => "qY8ynd7tX5",
"zone" => "5aec1540-b62c-43e3-9182-23a89da610d1",
],
],
}
> $c->groupBy('zone')
= Illuminate\Support\Collection {#8585
all: [
"6b3ecb1b-c29d-45b2-88b3-dabf5c8b6b62" => Illuminate\Support\Collection {#8557
all: [
[
"driver" => "sJUfNMZ2nJ",
"zone" => "6b3ecb1b-c29d-45b2-88b3-dabf5c8b6b62",
],
[
"driver" => "rz8lpiagH1",
"zone" => "6b3ecb1b-c29d-45b2-88b3-dabf5c8b6b62",
],
],
},
"5aec1540-b62c-43e3-9182-23a89da610d1" => Illuminate\Support\Collection {#8560
all: [
[
"driver" => "qY8ynd7tX5",
"zone" => "5aec1540-b62c-43e3-9182-23a89da610d1",
],
],
},
],
}