我先说我认为我的模型关联可能不正确
基本上我要做的就是返回公司所有员工的数组。
个人资料通过员工链接到地点。
以下是我的代码。
查询:
Location.findAll({
where: { companyId: user.profile.companyId },
include: [
{
model: Employee
}
]
})
这会生成错误"employee is not associated to location!"
。
我的模特:
Employee.belongsTo(Profile)
Employee.belongsTo(Location)
Profile.belongsTo(Company)
Location.belongsTo(Company)
Profile.belongsToMany(Location, {
through: Employee,
foreignKey: "profileId"
})
Location.belongsToMany(Profile, {
through: Employee,
foreignKey: "locationId"
})
编辑:
添加Location.hasMany(Employee)允许我进行查询,但是它仍然需要在另一个for循环中使用for循环来获得所需的正确数据结构。
const locations = await models.Location.findAll({
where: { companyId: user.profile.companyId },
include: [{ model: models.Profile }]
})
const response = []
locations.forEach(location => {
location.profiles.forEach(profile => {
response.push({ location, profile })
})
})
return response
下面的查询将返回完全相同但仅适用于单个位置的查询。我需要运行相同的查询,但需要多个位置。
Employee.findAll({ where: { locationId }, include: [Profile, Location] })
答案 0 :(得分:1)
您已指定位置属于多个位置,但您未能指定其他方式。您应该指定一个Location hasMany Employees。
指定Employee.belongsTo(Location)
可让您将相关位置包含在员工中。指定Location.hasMany(Employee)
允许您将相关员工包含在地点中。
我能够重新创建您的问题并使用此行修复它。
Location.hasMany(Employee, {
//...
})