bre*_*gly 5 node.js sequelize.js
不幸的是,我的情况比这更复杂一些。我有一个用户模型,其中belongsToMany部门(又是belongsToMany用户),但通过userDepartment手动定义的联接表来实现。我的目标是获取属于给定部门的所有用户。首先我们看一下models/user.js:
var user = sequelize.define("user", {
id: {
type: DataTypes.INTEGER,
field: 'emplId',
primaryKey: true,
autoIncrement: false
},
firstname: {
type: DataTypes.STRING,
field: 'firstname_preferred',
defaultValue: '',
allowNull: false
}
...
...
...
associate: function(models) {
user.belongsToMany(models.department, {
foreignKey: "emplId",
through: 'userDepartment'
});
})
}
...
return user;
Run Code Online (Sandbox Code Playgroud)
现在,看一下models/department.js:
var department = sequelize.define("department", {
id: {
type: DataTypes.INTEGER,
field: 'departmentId',
primaryKey: true,
autoIncrement: true
},
...
classMethods: {
associate: function(models) {
department.belongsToMany(models.user, {
foreignKey: "departmentId",
through: 'userDepartment',
onDelete: 'cascade'
});
}
...
return department;
Run Code Online (Sandbox Code Playgroud)
最后在models/userDepartment.js:
var userDepartment = sequelize.define("userDepartment", {
title: {
type: DataTypes.STRING,
field: 'title',
allowNull: false,
defaultValue: ''
}
}, {
tableName: 'user_departments'
});
return userDepartment;
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好。然而,这个查询:
models.user.findAll({
where: {'departments.id': req.params.id},
include: [{model: models.department, as: models.department.tableName}]
})
Run Code Online (Sandbox Code Playgroud)
失败并出现以下错误:
SequelizeDatabaseError: ER_BAD_FIELD_ERROR: Unknown column 'user.departments.id' in 'where clause'
Run Code Online (Sandbox Code Playgroud)
尝试包含 userDepartment 模型结果:
Error: userDepartment (user_departments) is not associated to user!
Run Code Online (Sandbox Code Playgroud)
简而言之:我有两个具有 M:M 关系的 Sequelize 模型。它们通过手动定义的联接表关联起来(该表为每个唯一关系添加职位,即用户 A 是部门 B 中的“经理”)。尝试按部门查找用户失败,并出现错误的表名错误。
续集版本“^2.0.5”
花了几个小时,但我找到了解决方案:
models.department.find({
where: {id:req.params.id},
include: [models.user]
Run Code Online (Sandbox Code Playgroud)
问题是 Sequelize 不会让你“超出范围”,因为它以model_name. 因此,例如,where 子句尝试比较user.departments.id当 Departments 表仅连接为 时departments.id。由于我们正在查询部门的值(ID),因此最多可以查询单个部门并返回其关联的用户。
| 归档时间: |
|
| 查看次数: |
9479 次 |
| 最近记录: |