sequelize-如何获取所有位置的所有员工

z9smfwbn  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(239)

我会先说我认为我的模型可能是不正确的
基本上,我要做的是返回一个公司所有员工的数组。
获取具有相同公司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] })
ki0zmccv

ki0zmccv1#

您已经指定了位于多个位置之下的位置,但未能指定其他位置。您应该指定一个位置有许多员工。
指定 Employee.belongsTo(Location) 允许您包含与员工相关的位置。指定 Location.hasMany(Employee) 允许您包含具有位置的相关员工。
我能重现你的问题并用这条线解决它。

Location.hasMany(Employee, {
    //...
})

相关问题