我会先说我认为我的模型可能是不正确的
基本上,我要做的是返回一个公司所有员工的数组。
获取具有相同公司ID的所有位置
使用这些位置,将所有配置文件绑定到locationid。
配置文件通过员工链接到位置。
下面是我的代码。
查询:
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] })
1条答案
按热度按时间ki0zmccv1#
您已经指定了位于多个位置之下的位置,但未能指定其他位置。您应该指定一个位置有许多员工。
指定
Employee.belongsTo(Location)
允许您包含与员工相关的位置。指定Location.hasMany(Employee)
允许您包含具有位置的相关员工。我能重现你的问题并用这条线解决它。