是否使用Objection JS进行内部联接查询?

时间:2019-02-03 15:48:12

标签: postgresql objection.js

我得到了以下数据模型:https://imgur.com/a/AwwpW9F

基本上,一个if (moneyInput.Text != null)可以属于许多User,而一个Projects可以具有许多Project,我通过一个名为{{ 1}}

我可以使用原始SQL查询

Users

哪个给我

UserProjects

我将如何使用Objection ORM构造此查询?也许我可以直接进行原始查询?像

SELECT "user".email, project.name FROM "user"
JOIN userprojects ON userprojects.user_id = "user".id
JOIN project ON project.id = userprojects.project_id

2 个答案:

答案 0 :(得分:2)

Objection.js可以代替您自己完成所有工作。您只需声明一个ManyToManyRelation

  static relationMappings = {
    projects: {
      relation: Model.ManyToManyRelation,
      modelClass: Project,
      join: {
        from: 'user.id',
        through: {
          from: 'userprojects.user_id',
          to: 'userprojects.project_id'
        },
        to: 'project.id'
      }
    }
  }

那么您就可以使用急切的加载获取用户的项目:

User.query().eager('projects').where("id", userId).first()

您将得到类似的东西:

User {
  id: 3,
  firstname: 'firstname',
  lastname: 'lastname',
  email: 'email',
  projects: [
    {id: 1,
    name: 'name1'},
    {id: 2,
    name: 'name2'},
  ]
}

答案 1 :(得分:0)

Nvm,找到了解决方法

/关闭

JK,

如果其他人遇到同样的问题,这对我有用:

return User.query().where("user_id", parent.id)
.join('userprojects', 'user.id', '=', 'userprojects.user_id')
.join('project', 'project.id', '=', 'userprojects.project_id')
.select('user.id', 'userprojects.project_id', 'project.name')
相关问题