PHP Slim RESTful API-两表联接嵌套JSON

时间:2018-10-27 12:50:26

标签: php mysql json rest slim

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

我必须使用基数为1:n的表。通过GET-Call,我想获取主表的数据,并使用外键将所有表嵌套在其中。像这样:
计划结果

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

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

Slim 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"
    }
]

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

非常感谢! 你的 大卫

1 个答案:

答案 0 :(得分:0)

您无法使用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并组装一个数据对象,该数据对象包含查询中的列,但bilder值为爆炸的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);

希望这会有所帮助。