我目前正在使用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"
}
]
您希望知道实现此目标的正确方法!
非常感谢! 你的 大卫
答案 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);
希望这会有所帮助。