如何在 sequelize 中加入 4 个或更多表?
how to join 4 or more tables in sequelize?
我正在使用 sequelize 使用现有数据库重写一个应用程序。我已将现有的 table 转换为如下续集中的模型。我有员工 table 和访问类型模型,在管理员访问权限中具有读、写或两者。所有这些访问都针对员工和员工访问进行跟踪 table。但是还有一个员工组 table,它会跟踪员工是否属于特定组及其访问类型。我如何使用 sequelize 进行查询,以从 employeeAccess table 获取特定的员工访问列表,以及它是否属于组以及它是否属于该组的访问类型。所以本质上,需要通过加入 4 tables - employee、employee access、employee group 和 access type table.
来查询
- 员工模型
var employee = db.seq.define('Employee',{
id: { type: db.Sequelize.INTEGER},
managerId: { type: db.Sequelize.INTEGER},
employee_name: { type: db.Sequelize.STRING} ...
});
employee.hasOne(address);
employee.belongsTo(employee, { foreignKey: 'managerId', as: 'Manager' });
- 地址模型
var adress= db.seq.define("Adresss",{
employee_id: { type: db.Sequelize.INTEGER}...
});
address.belongsto(employee);
- accessType 模型
var accessType = db.seq.define('AccessType ',{
id: { type: db.Sequelize.INTEGER},
type: { type: db.Sequelize.STRING}....
});
accessType.hasMany(employeeGroup );
accessType.hasMany(employeeAccess);
- 员工组模型
var EmployeeGroup = db.seq.define('EmployeeGroup ',{
id: { type: db.Sequelize.INTEGER},
access_type_id: { type: db.Sequelize.INTEGER},
employee_id: { type: db.Sequelize.INTEGER} ...
});
EmployeeGroup .belongsto(employee);
EmployeeGroup .belongsto(accessType );
- 员工访问模型
var employeeAccess = db.seq.define('employeeAccess ',{
id: { type: db.Sequelize.INTEGER},
access_type_id: { type: db.Sequelize.INTEGER},
employee_id: { type: db.Sequelize.INTEGER} ...
});
employeeAccess.belongsto(employee);
employeeAccess.belongsto(accessType );
sql
select * from employeeAcess as a
left outer join employeeGroup as g
on a.access_type_id = g.access_type_id
left outer join accesstype as t
on g.access_type_id = t.id
where a.employee_id = 1 and g.employee_id = 1;
尝试这样的事情:
const employeeItem = await employee .findById(1, {
include: [{
model: employeeGroup,
include: [accessType]
}, employeeAccess],
where: {
'$employeeGroup.access_type_id$': sequelize.col('employeeAccess.access_type_id')
}
}
我正在使用 sequelize 使用现有数据库重写一个应用程序。我已将现有的 table 转换为如下续集中的模型。我有员工 table 和访问类型模型,在管理员访问权限中具有读、写或两者。所有这些访问都针对员工和员工访问进行跟踪 table。但是还有一个员工组 table,它会跟踪员工是否属于特定组及其访问类型。我如何使用 sequelize 进行查询,以从 employeeAccess table 获取特定的员工访问列表,以及它是否属于组以及它是否属于该组的访问类型。所以本质上,需要通过加入 4 tables - employee、employee access、employee group 和 access type table.
来查询- 员工模型
var employee = db.seq.define('Employee',{
id: { type: db.Sequelize.INTEGER},
managerId: { type: db.Sequelize.INTEGER},
employee_name: { type: db.Sequelize.STRING} ...
});
employee.hasOne(address);
employee.belongsTo(employee, { foreignKey: 'managerId', as: 'Manager' });
- 地址模型
var adress= db.seq.define("Adresss",{
employee_id: { type: db.Sequelize.INTEGER}...
});
address.belongsto(employee);
- accessType 模型
var accessType = db.seq.define('AccessType ',{
id: { type: db.Sequelize.INTEGER},
type: { type: db.Sequelize.STRING}....
});
accessType.hasMany(employeeGroup );
accessType.hasMany(employeeAccess);
- 员工组模型
var EmployeeGroup = db.seq.define('EmployeeGroup ',{
id: { type: db.Sequelize.INTEGER},
access_type_id: { type: db.Sequelize.INTEGER},
employee_id: { type: db.Sequelize.INTEGER} ...
});
EmployeeGroup .belongsto(employee);
EmployeeGroup .belongsto(accessType );
- 员工访问模型
var employeeAccess = db.seq.define('employeeAccess ',{
id: { type: db.Sequelize.INTEGER},
access_type_id: { type: db.Sequelize.INTEGER},
employee_id: { type: db.Sequelize.INTEGER} ...
});
employeeAccess.belongsto(employee);
employeeAccess.belongsto(accessType );
sql
select * from employeeAcess as a
left outer join employeeGroup as g
on a.access_type_id = g.access_type_id
left outer join accesstype as t
on g.access_type_id = t.id
where a.employee_id = 1 and g.employee_id = 1;
尝试这样的事情:
const employeeItem = await employee .findById(1, {
include: [{
model: employeeGroup,
include: [accessType]
}, employeeAccess],
where: {
'$employeeGroup.access_type_id$': sequelize.col('employeeAccess.access_type_id')
}
}