在协会中添加帮助

所有,下面的附加是一个SQL查询,我用它作为一个原始查询在续集中,它工作正常。 现在我正在尝试将它设置为mixin关联,但不能这样做。 有没有通过帮助文件,但不能完全掌握的细节。 也许它只是我。 无论如何,下面附加的是我试图返工的查询。 如果有人能抛出一些指针或有一些样本来帮助我重做这个,会感激不尽? 提前致谢。

select cust.*, cust_role.id, cust_role.rolename, role.roletype from customer cust, customer_roles cust_role, roles role where cust.id = cust_role.user and cust_role.role = role.id and cust.id like '0123456' //customerId 

表关系

 customer_roles has a foreign key to both roles and customer tables customer to customer_roles (1 to many), customer_roles to roles (many to 1) 

我正在导入模型

 var custModel = sequelize.import('../models/customer.js'); var custRolesModel = sequelize.import('../models/customer_roles.js'); var roleModel = sequelize.import('../models/roles.js'); 

试图设定关系

 custModel.hasMany(custRolesModel); custRolesModel.belongsTo(custModel); roleModel.hasMany(custRolesModel); custRolesModel.belongsTo(roleModel); 

并最终试图获得客户..

 custModel.findAll({ include:[{ model:custRolesModel, include:[{ model:roleModel, where: { username:req.body.username }, required:false }] }] }).then(function (result) { ...... 

这可能工作:

 custModel.findAll({ where : { id:req.body.userId }, include:[{ model:custRolesModel, include:[{ model:roleModel }] }] }).then(function (result) { ...... 

请注意,where子句属于客户模型而不是angular色模型。

基于上述的build议和SO中的另一个build议,我能够解决这个问题。 这是我做任何人需要知道的事情。

https://stackoverflow.com/a/36006808/1657861

修改的关系

 custModel.belongsToMany(custRolesModel, { through:'customer_roles', //Used table name foreignKey: 'user', otherKey:'id' }); custRolesModel.belongsToMany(roleModel, { through: 'customer_roles', //Used table name foreignKey: 'role', otherKey: 'id' }); usersModel.findAll({ where : { username:req.body.username }, include:[{ model:userRolesMembershipModel, include:[{ model:roleModel }] }] })