filter Sequelize belongsToMany get<Association> association table

filter Sequelize belongsToMany get<Association> association table

我正在使用 Sequelize 4.37.10,它运行良好。 不幸的是,我认为文档并不完美。所以它缺少一点描述 belongsToMany 的可能性。

我有以下问题:

我这样定义我的表:

const Department = db.define('department', {
  name: {type: Sequelize.STRING, allowNull: false},
  shortName: {type: Sequelize.STRING, allowNull: false}
})

const Employee = db.define('employee', {
  title: {type: Sequelize.STRING},
  name: {type: Sequelize.STRING, allowNull: false},
  surname: {type: Sequelize.STRING, allowNull: false},
  .
  .
  role: {type: Sequelize.STRING}
})

然后我这样关联表:

const EmployeeDepartments = db.define('employeeDepartments', {
  manager: {type: Sequelize.BOOLEAN, allowNull: false}
})

Department.belongsToMany(Employee, {through: EmployeeDepartments})
Employee.belongsToMany(Department, {through: EmployeeDepartments})

现在我想让所有部门员工的 manager 字段都设置为 true。 创建没问题,但是select对我来说是个问题。

我尝试了以下但没有成功:

department.getEmployees({where: {manager: true}})

我也想到了范围,但我不知道如何正确设计它。

你能帮我吗?

department.getEmployees({where: {manager: true}})

用这个更改此代码。

department.getEmployees(      
  include:{
    model: employeedepartments, // your employee departments model name
    {where: {manager: true},      
    required:true, 
  }
})

您只需在查询中添加 include

有趣的是,我只是在寻找完全相同的东西,唯一的结果是你几个小时前的问题...

我已经解决了,你需要的是:

department.getEmployees({ through: { where: { manager: true } } })

您还可以获得 department 的所有员工,其中您只有 id:

const department = Department.build( { id: departmentId } );
// proceed as above

经过一段时间的搜索,我自己找到了一个非常简单的答案。

当使用 belongsToMany 时,Sequelize 确实使用连接从第二个 table 获取数据(我知道)。

我可以选择使用以下语法:

department.getEmployees({where: {'$employeeDepartments.manager$': true}})

我在 google 的一个页面上找到了它,但不幸的是我丢失了 url。 也许这可以帮助遇到类似问题的人。