0

I am trying to display a force directed tree. There are 3 models Company / Division / Department

Each Company has many divisions. Each division belongs to one Company.

Each Division has many departments. Each department belongs to one Division.

amcharts expects a syntax like:

[{
  "name": "First",
  "children": [{
    "name": "A1", "value": 100
  }, {
    "name": "A2", "value": 60
  }, {
    "name": "A3", "value": 30
  }]
}, {
  "name": "Second",
  "children": [{
    "name": "B1", "value": 135
  }, {
    "name": "B2", "value": 98
  }, {
    "name": "B3", "value": 56
  }]
}, {
  "name": "Third",
  "children": [{
    "name": "C1", "value": 335
  }, {
    "name": "C2", "value": 148
  }, {
    "name": "C3", "value": 126
  }, {
    "name": "C4", "value": 26
  }]
}, {
  "name": "Fourth",
  "children": [{
    "name": "D1", "value": 415
  }, {
    "name": "D2", "value": 148
  }, {
    "name": "D3", "value": 89
  }, {
    "name": "D4", "value": 64
  }, {
    "name": "D5", "value": 16
  }]
}, {
  "name": "Fifth",
  "children": [{
    "name": "E1", "value": 687
  }, {
    "name": "E2", "value": 148
  }]
}]

I am only able to get the first level here:

foreach ($companies as $company) {
    $data[] = 
            (object) [
             'name' => $company->name,
             'value' => $company->value,
            ];
}

I am sure that I need to further iterate through $company->devisions and so on but not sure how to build the final construct amcharts is expecting. Any hints?

1 Answers1

0

You can try something in the lines of:

        $data = [];
        foreach ($companies as $company) {
            $childrenArray = [
                'name' => $company->name,
            ];
            foreach ($company->divisions as $division) {
                $childArray['children'][] = [
                    'name' => $division->name,
                    'value' => $division->value,
                ];
            }
            $data[] = $childrenArray;
        }
        return json_encode($data);
Christophe Hubert
  • 2,833
  • 1
  • 12
  • 25
  • Super, this builds the structure. But now it's all arrays. amcharts expects arrays within objects. See: https://www.amcharts.com/demos/force-directed-tree/ – Florian S. Apr 23 '20 at 19:44
  • `json_encode($data);` will return the expected object - if your question is answered, please approve the solution – Christophe Hubert Apr 24 '20 at 03:21