filter sequelize belongstomany get< association>关联表

zvokhttg  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(362)

我正在使用Sequelize4.37.10,它工作得很好。不幸的是,在我看来,文档并不完美。所以它缺乏一点对潜在可能性的描述。
我有以下问题:
我这样定义我的表:

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。创建没有问题,但是选择对我来说是个问题。
我尝试了以下方法但没有成功:

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

我也想过范围,但我不知道如何设计适当。
你能帮我吗?

wgx48brx

wgx48brx1#

我自己找了一会儿才找到一个非常简单的答案。
使用时 belongsToMany sequelize确实使用联接从第二个表中获取数据(我知道这一点)。
我可以选择使用以下语法:

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

我在google上的一个页面上发现了这个,但不幸的是我丢失了url。也许这对有类似问题的人有帮助。

mgdq6dx1

mgdq6dx12#

有趣的是,我只是在寻找完全相同的东西,唯一的结果是你几个小时前的问题。。。
我现在已经解决了,你需要的是:

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

你也可以让公司的所有员工 department 其中你只有 id :

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

sgtfey8w3#

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

用这个修改这个代码。

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

您只需在查询中添加include

相关问题