我的MSQL表中有这两个模型之间的多对多关系:
- 场地-代表可以有多个所有者(雇员)的场地
- 员工-代表可以是首席执行官,销售员工或任何其他形式的员工。
我正在使用sequelize建立这样的关系:
Employee.associate = function (models) {
models.Employee.belongsToMany(models.Venue, { through: 'EmployeeVenues' })
}
Run Code Online (Sandbox Code Playgroud)
Venue.associate = function (models) {
models.Venue.belongsToMany(models.Employee, { through: 'EmployeeVenues' })
}
Run Code Online (Sandbox Code Playgroud)
根据Sequelize文档,它将创建一个名为EmployeeVenues的新模型,该模型具有等效的外键employee_id和场所_id。需要通过定义。Sequelize以前会尝试自动生成名称,但这并不总是导致最合理的设置。这会将方法getVenues,setVenues,addVenue,addUsers添加到Employee中。
并且这是正确的,当我启动我的Sequelize时,它将创建一个名为EmpoyeeVenues的新表,并使用正确的外键作为复合键。但是,当我查询getVenues时,它不会返回预期的输出。相反,它也返回关联的表值,这是我不想要的。
router.get('/api/v1/users/:employee_id/venues', (request, response) => {
var employeeId = request.params.employee_id;
models.Employee.findOne({
where: {id: employeeId}
}).then((employee) => {
if(!employee) { return response.status(400).send("Employee doesnt have a venue registered yet.")}
var venues = employee.getVenues().then((venues) => {
response.status(200).send(venues);
})
})
});
Run Code Online (Sandbox Code Playgroud)
[
{
"id": 1,
"capacity": …
Run Code Online (Sandbox Code Playgroud)