PHP 苗条 RESTful API - 两个 Table 加入嵌套 JSON

PHP Slim RESTful API - Two Table Join Nested JSON

我目前正在使用 PHP Slim Framework 开发 RESTful API。我目前遇到以下问题:

我必须 table 具有 1:n 基数。通过 GET-Call,我想获取主 table 的数据并嵌套其中的所有 table 都带有外键。像这样:
计划结果

[{
"id":"1",
"ueberschrift":"UEBER",
"text_kurz":"Lorem ipsum...",
"kategorie":"HEAL", 
"bilder":[
    {"src":"wed1.png"},
    {"src":"wed2.png"}
 ]},......

这就是我的 mysql 数据库的一部分的样子 Current databse

苗条PHP码

$app->get('/rezensionen', function ($request, $response, $args) {
        $sth = $this->db->prepare("SELECT 
rezension.id,ueberschrift,text_kurz,kategorie, bild.src FROM rezension INNER 
JOIN bild ON (rezension.id=bild.rezension_id)");
        $sth->execute();
        $todos = $sth->fetchAll();
        return $this->response->withJson($todos);
});

这是我得到的:
实际结果

[
    {
        "id": "1",
        "ueberschrift": "UEBER",
        "text_kurz": "Lorem Ipsum...",
        "kategorie": "HEAL",
        "src": "wed1.png"
    },
    {
        "id": "1",
        "ueberschrift": "UEBER",
        "text_kurz": "Lorem Ipsum...",
        "kategorie": "HEAL",
        "src": "wed2.png"
    }
]

希望您知道实现此目标的正确方法!

非常感谢! 你的, 大卫

您不能 return 使用 SQL 的关系结果集,因此您将需要做更多的工作才能获得该输出。

如果将查询更改为

SELECT 
    rezension.id
   ,ueberschrift
   ,text_kurz
   ,kategorie
   ,GROUP_CONCAT(bild.src) AS bilderCSV
FROM 
    rezension 
INNER JOIN bild 
    ON rezension.id = bild.rezension_id 
GROUP BY 
    rezension.id

然后,您将获得每个 rezension.id 的一条记录以及与之相关的 bild.src 条记录的 CSV。

然后,在代码中,您需要拆分该 CSV 和 assemble 一个数据对象,该数据对象包含查询中的列,但图像值是展开的 CSV 数组。关联数组可能是最简单的方法。

不确定 Slim 是如何做到的,但这是一个粗略的想法

foreach($todos as $todo) {
    $output['id'] = $todo->id;
    $output['ueberschrift'] = $todo->ueberschrift;
    $output['text_kurz'] = $todo->text_kurz;
    $output['kategorie'] = $todo->kategorie;

    $srcs = explode(",", $todo->bilderCSV);
    foreach($srcs as $src) {
        $output['bilder'][]['src'] = $src
    }

    $outputs[] = $output
}

return $this->response->withJson($outputs);

希望对您有所帮助。