user3718908x100
user3718908x100

Reputation: 8509

Group array items with eloquent

I have the following eloquent query:

$extras = EventExtra::select('id', 'category', 'name', 'price', 'description', 'company')->get();

It gets some data from me from my database. What i want is for the returned data to be grouped twice, first by the category and then second by the company so that in the end i have something like this returned to the client:

    [
  {
    "name": "donation",
    "collection": [
        {
          "name": "sampleCompany1",
          "array": [
            {
              "name": "extra1",
              "description": "",
              "value": ""
            },
            {
              "name": "extra4",
              "description": "",
              "value": ""
            },
            {
              "name": "extra6",
              "description": "",
              "value": ""
            }
          ]
        }
      ]
  },
{
  "name": "donation",
  "collection":  [
      {
        "name": "sampleCompany2",
        "array": [
          {
            "name": "extra2",
            "description": "",
            "value": ""
          },
          {
            "name": "extra3",
            "description": "",
            "value": ""
          }
        ]
      }
    ]
}]

I just typed the above myself so it might not be valid object array but basically it shows what i want to accomplish here.

Upvotes: 2

Views: 1715

Answers (1)

codegeek
codegeek

Reputation: 33299

You can use Collection to build your custom object. Something like this:

$return_data = Collect();

To add items in the collection with a property, you can use the put function.

$inner_data->put('name',$extras->name);

You can also add a collection within a collection. To just push an existing collection in the collection, use push function

$inner_data->push($some_collection)

EDIT: Since you want a working example, see this below:

Lets say you want to create the following using collection:

{
    "name": "extra1"
    "description": "",
    "value": ""
}

You will do something like this:

$my_collection = Collect();
$my_collection->put('name','extra1');
$my_collection->put('description','');
$my_collection->put('value','');

Now you can add this collection to another collection where you don't need a key. So lets say now it looks like this:

[
    {
     "name": "extra1"
     "description": "",
     "value": ""
    },
    {
     "name": "extra4"
     "description": "",
     "value": ""
    }
]

You will now do:

$my_final_collection = Collect();
foreach($my_collections as $my_collection) {
    $my_final_collection->push($my_collection); // and so on in a loop
}

Upvotes: 1

Related Questions