Search code examples
laravellaravel-query-builder

What to do when the same ID is present in multiple rows but should be merged into one?


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
                        )

                )

        )

)

Solution

  • 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",
              ],
            ],
          },
        ],
      }