首页 > 解决方案 > 使用 MySQL 和 PHP 为动态 d3.js 库生成 JSON

问题描述

我正在与 Laravel 合作开发一个客户项目,我想建立一个树结构,其中包含在系统中注册的用户。我从 d3.js 库中找到了一个执行任务的脚本,为此它使用 JSON 来获取数据。

它的工作结构如下:

{
    "name": "Top Level",
    "parent": null,
    "children": [{
            "name": "Level 2: A",
            "parent": "Top Level",
            "children": [{
                    "name": "Son of A",
                    "parent": "Level 2: A"
                },
                {
                    "name": "Daughter of A",
                    "parent": "Level 2: A"
                }
            ]
        },
        {
            "name": "Level 2: B",
            "parent": "Top Level"
        }
    ]
}

我试图以相同的格式准备我的 JSON,但我无法管理。例如,我的数据库中有一个用户,"parent": null在我的情况下是: "id_user_parent": null,并且所有其他用户都与其他用户 ID 相关。

我的问题是,如何让这个用户"id_user_parent": null首先和其他用户分别填充他们各自的孩子?

我在控制器中的调用:

$users = User::select('name_first', 'name_second', 'id_user_parent')->get()

我的数据库中的答案是:

[
    {
        "name_first": "Tiago",
        "name_second": "Revers Paza",
        "id_user_parent": null
    }, 
    {
        "name_first": "Yuri",
        "name_second": "Luiz Hugo da Cunha",
        "id_user_parent": 1
    }, 
    {
        "name_first": "Severino",
        "name_second": "Ben\u00edcio das Neves",
        "id_user_parent": 1
    }
]

我生成了一个脚本并处理了数据库中的这些数据,得到了以下结果:

$users = User::select('name_first', 'name_second', 'id_user_parent')->get();

foreach ($users as $user) {
    if ($user['id_user_parent'] == null) {
        $main['name'] = $user['name_first'] . ' ' . $user['name_second'];
        $main['parent'] = $user['id_user_parent'];

        $data = $main;
    }
}
foreach($users as $key => $user) {
    if ($user['id_user_parent'] != null) {
        $data['children'][$key]['name'] = $user['name_first'] . ' ' . $user['name_second'];
        $data['children'][$key]['parent'] = $user['id_user_parent'];
    }
}
dd($data);

我的 JSON 结果是:

array:3 [▼
    "name" => "Tiago Revers Paza"
    "parent" => null
    "children" => array:2 [▼
        1 => array:2 [▼
            "name" => "Yuri Luiz Hugo da Cunha"
            "parent" => 1
        ]
        2 => array:2 [▼
            "name" => "Severino Benício das Neves"
            "parent" => 1
        ]
    ]
]

也就是说,正如“预期”的那样,它仅适用于单个级别,并且其想法是根据id_user_parent.

有人对如何从我的数据库动态生成此 JSON 有任何想法吗?

标签: phpmysqljsonlaravel

解决方案


推荐阅读