我有多个相互关联的模型。
e.g:
var User = sequelize.define("user")
var Project = sequelize.define("project")
Project.hasMany(User)
现在我想查询包含特定用户的所有项目。
e.g:
Project.findAll({
include: [
{
model: User,
where: { id }
}
]
})
这有效,但也会加载用户并将其附加到项目中。 我怎么能告诉sequelize,不应该将用户添加到找到的项目中?
答案 0 :(得分:1)
我刚刚设法解决了同样的问题(使用Sequelize 4)。
您可以指定不希望仅使用attributes: []
来使用User的任何字段,因此您的代码将变为:
Project.findAll({
include: [
{
attributes: [],
model: User,
where: { id }
}
]
})
答案 1 :(得分:0)
在双方的sequelize中使用belongsToMany()方法定义多对多关系。对于您的特定用例,您必须使用直通模型进行关系并直接查询直通模型。
var User = sequelize.define("user")
var Project = sequelize.define("project")
var ProjectUser = sequelize.define("projectUser")
Project.belongsToMany(User, {
through: ProjectUser
})
User.belongsToMany(Project, {
through ProjectUser
});
ProjectUser.findAll({
where: {
UserId: 'someId'
},
// We only want the project, not the user.
// You might need to do ProjectUser.belongsTo() for both
// models for this to work.
include: [Project]
})
.then(function(results) {
// Here we are getting an array of ProjectUsers, to return all the projects
// we map it to a new array of only projects.
return results.map(function(userProject) {
return userProject.Project;
});
})