Node.js 如何将两个表和相邻表的输出字段合并在一起?

Node.js 如何将两个表和相邻表的输出字段合并在一起?,node.js,knex.js,objection.js,Node.js,Knex.js,Objection.js,各位,能告诉我吗 我使用knex.js的objective.js(ORM)库 加入用户和角色表,一切都很好 我使用它: const users=wait User.query().eager().roles') 我明白了: {“id”:1,“电子邮件”:ann@mail.com“,”密码“:”qwe“,”角色“:1,“角色“:{”id“:1,“名称“:”admin“}} 但是我怎样才能得到一个平面结构呢 {“id”:1,“电子邮件”:ann@mail.com“,”密码“:”qwe“,”角色“ad

各位,能告诉我吗

我使用knex.js的objective.js(ORM)库

加入用户和角色表,一切都很好

我使用它:

const users=wait User.query().eager().roles')

我明白了:

{“id”:1,“电子邮件”:ann@mail.com“,”密码“:”qwe“,”角色“:1,“角色“:{”id“:1,“名称“:”admin“}}

但是我怎样才能得到一个平面结构呢


{“id”:1,“电子邮件”:ann@mail.com“,”密码“:”qwe“,”角色“admin”}

我通常希望通过一个
hasonrelation
关系来实现这一点,所以我将假设这就是您在这里所拥有的:

{
  "id": 1,
  "email": "ann@mail.com",
  "password": "qwe",
  "role": 1,
  "roles": {
    "id":1,
    "name": "admin"
  }
}
如果您的用户一次只能有一个角色,这应该可以。要获得平面结构,您可以使用JavaScript对其进行后期处理:

return {
  ...user,
  role: roles.name
}
或创建一个:

这不会阻止添加
角色
对象,但会为JSON中的名称提供一级别名

export default class User extends Model {
  static get virtualAttributes() {
    return ['roleName'];
  }

  roleName() {
    return this.roles.name;
  }
  // ...
}