我正在将NODEJS和MySQL用于API服务器,但遇到了问题。由于外键,我正在运行的查询有多行结果。
User Table Address Table
|id| name| |id|user_id| Address|
| 1| frank| | 1| 1| 123 main street, Moncton|
| 2| steve| | 2| 2|97 duplessie street, Edmundston|
| 3| 2| 933 manhole av, Grand Sault|
如何为查询结果或至少为API响应获取如下所示的多级json对象。
{
"id":1,
"name": "frank",
"addresses": [
{"id":1,"Address":"123 main street, Moncton"}
]
},
{
"id":2,
"name": "steve",
"addresses": [
{"id":2,"Address":"97 duplessie street, Edmundston"},
{"id":3,"Address":"933 manhole av, Grand Sault"}
]
}
答案 0 :(得分:0)
如果您仅运行原始查询,则得到的结果就是得到的结果。对象关系映射库(例如Objection,Bookshelf或Sequelize)将自动为您处理此问题,但可能涉及比您想要的更多的设置和/或抽象。
如果您希望将其保持在最小限度,则始终可以自己处理结果数组。不久前,我在自己的项目(用于Postgres的数据映射器)中遇到了这个确切的问题,并开发了decomposer,您应该可以毫无问题地吞噬。有关构建架构,请参见docs。
答案 1 :(得分:0)
我按照@dmfay的指示提出了一个对我有用的解决方案。
此函数,我传递2个JSON对象以将地址合并到用户JSON中,并在单个JSON对象中返回所有内容。
function combineResults(users, addresses){
***********************************
*** Go through each user object ***
***********************************
users.forEach(function(user) {
user.addresses = addresses.find(address => address.user_id === user.id);
}
return users;
}