[英]sequelize hasMany, how to use customized foreginKey
模型EmployeeView
module.exports = function(sequelize, DataTypes) {
var _this = sequelize.define('EmployeeView', {
employeeId: {
type: DataTypes.INTEGER,
field: 'code'
},
username: DataTypes.STRING,
email: {
type: DataTypes.STRING,
field: 'emailaddress'
},
department: {
type: DataTypes.STRING,
field: 'department_name'
},
departmentId: {
type: DataTypes.STRING,
field: 'departments_id'
}
}, {
timestamps: false,
freezeTableName: true,
tableName: 'employees_view',
classMethods: {
associate: function(models) {
_this.belongsTo(models.EmployeeCategory, {
foreignKey: {
name: 'employeecategories_id'
}
});
_this.hasMany(models.EmployeeFile, {
foreignKey: 'employees_code'
});
}
}
});
return _this;
};
模型EmployeeFile
module.exports = function(sequelize, DataTypes) {
var _this = sequelize.define("EmployeeFile", {
employeeId: {
type: DataTypes.INTEGER,
field: 'employees_code'
},
filename: {
type: DataTypes.STRING,
filed: 'filename'
},
employeeFileTypeId: {
type: DataTypes.INTEGER,
field: 'employee_file_types_id'
}
}, {
timestamps: false,
freezeTableName: true,
tableName: 'employee_files'
});
return _this;
};
路由器
router.get('/employee', function(req, res) {
models.EmployeeView.findAll({
where: {
active: req.query.active
}
include: [{
model: models.EmployeeCategory
}, {
model: models.EmployeeFile,
}]
}).then(function(employee) {
res.json(employee);
});
});
我有兩個表' employee_view '( 它是一個視圖 )和' employee_files ',它們映射到' EmployeeView '和' EmployeeFile '。 ' employee_view '將' id '字段作為主鍵,將' code '字段作為員工編號。 employee_files '有' employees_code '作為主鍵,foreignKey與' code '字段綁定。 所以我希望通過這種關系得到' employee_files '數據。
實際上,我一無所獲。 因為sequelize將執行“EmployeeView.id == EmployeeFile.employees_code”。 但我希望sequelize執行“EmployeeView.code == EmployeeFile.employees_code”。我該怎么辦?
只需將primaryKey: true
添加到employeeId字段即可將EmployeeView鏈接到EmployeeFiles,因為belongsToMany關系只鏈接到它的父級的主鍵
employeeId: {
type: sequelize.INTEGER,
field: 'code',
primaryKey: true
},
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.