我目前正在将NodeJS与knex(Postgresql)一起用于数据库。
问题:
想象一下数据库中的以下两个表:
表1
PROJECT
id (pk)
name
表2
EMPLOYEE
id (pk)
name
project_id (fk)
我想为用户创建一个类似于以下内容的json响应:
{
projects: [
{
id: 1,
name: 'emxample 1',
employees: [
{
id: 1,
name: 'example 1'
},
{
id: 2,
name: 'example 2'
}
]
}
]
}
以此类推。
进行如下查询:
let query = knex('project').select('project.*', 'employee.*').join('employee', 'employee.project_id', '=', 'project.id');
query.then((projects) => { res.json(projects); });
使用res.json()
不会返回employees
的数组。实现该目标的方法是什么?
答案 0 :(得分:2)
SQL响应本质上是平面表,因此除knex之外,您还需要一个外部lib,该库可以将平面信息重构为嵌套对象。
大多数ORM库都知道该怎么做。例如,构建在knex之上的 objection.js 使用.eager()
来获取嵌套关系。使用objection.js ORM,查询看起来像这样Project.query().where('id', 1).eager('employees')