【问题标题】:How to get relationship/ assosiation in sequelizejs ORM如何在 sequelize js ORM 中获取关系/关联
【发布时间】:2014-10-23 03:33:03
【问题描述】:

通过以下参考,我了解了如何使用关系表映射多对多

http://sequelizejs.com/docs/latest/associations#many-to-many

User = sequelize.define('User', { user_name : Sequelize.STRING})
Project = sequelize.define('Project', { project_name : Sequelize.STRING })
UserProjects = sequelize.define('UserProjects', {
    status: DataTypes.STRING
})

User.hasMany(Project, { through: UserProjects })
Project.hasMany(User, { through: UserProjects })

但是如何查询 UserProject

我试过了

User.find({where:{id:1},include,[UserProjects]})
User.find({where:{id:1},include,[Projects]})
User.find({where:{id:1},include,[UserProjects]})
User.find({where:{id:1},include,[Projects]})

但我没有得到结果

对创建的表进行如下排序

users(id,name)
projects(id,project_name)
userprojects(id,UserId,ProjectId)

我试过https://github.com/sequelize/sequelize/wiki/API-Reference-Associations#hasmanytarget-options

User.find({where:{id:1}}).success(function(user){
    user.getProjects().success(function (projects) {
      var p1 = projects[0] // this works fine but 2 queries required. I expect in single find. without getProjects
      p1.userprojects.started // Is this project started yet?
    })
})

如何获取一个用户的所有项目??

【问题讨论】:

    标签: mysql node.js orm sequelize.js


    【解决方案1】:

    您应该能够通过两种不同的方式获取用户的所有属性:使用包含和从用户实例获取项目。

    使用包含您上面提交的代码几乎是正确的。此方法只会使用 JOIN 操作对数据库进行一次查询。如果您希望所有用户都有相应的项目,请尝试:

    User.findAll({include: [Project]})
    

    您也可以直接从用户实例中获取项目。这将对数据库进行两次查询。这个代码看起来像

    User.find(1).then(function(user) {
      user.getProjects().then(function(projects) {
        // do stuff with projects
      });
    });
    

    这对你有用吗?

    【讨论】:

      猜你喜欢
      • 2016-11-26
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      相关资源
      最近更新 更多