Sequelize:使用postgresql中的另一个表连接Many to Many标签表

时间:2018-01-30 19:38:51

标签: node.js postgresql sequelize.js

我正在尝试使用标签(查找)表在Sequelize中为我的Postgres表设置多对多的关系。我成功地建立了这种关系。

现在我的查找表有一个附加字段,它是另一个表的外键。我希望该表的数据包含在我的结果集中。这是我很难搞清楚语法的地方。

我的模特:

Models.user = sequelize.define('user', { //attributes});
Models.school = sequelize.define('school', { //attributes });
Models.role = sequelize.define('role', { //attributes });

Models.userSchools = sequelize.define('user_school', {
    user_school_id: { type: Sequelize.INTEGER, primaryKey: true }
});

Models.user.belongsToMany(Models.school, { through: Models.userSchools, foreignKey: 'user_id', otherKey: 'school_id' });
Models.school.belongsToMany(Models.user, { through: Models.userSchools, foreignKey: 'school_id', otherKey: 'user_id' });
Models.userSchools.belongsTo(Models.role, { foreignKey: 'role_id' });

工作查询:此查询为我提供了所有用户及其学校。

Models.user.findAll({
            where: {
                //condition
            },
            include: [Models.school]
        })

现在我想把每个学校的角色都包括在内。以下查询均无效。

Models.user.findAll({
            where: {
                //conditions
            },
            include: [Models.schools, Models.role]
        })

上面的查询引发了一个错误,指出角色与用户无关,这是预期的。

Models.user.findAll({
            where: {
                //conditions
            },
            include: [Models.schools, {model: Models.userSchools, include: Models.role}]
        })

此查询也会抛出错误:

  

" userSchools与用户"。

无关

任何人都可以帮助我了解如何从userSchools模型中获取角色信息吗?

编辑:

我添加了"通过"条件,它获取role_id但不是相关的角色数据。

Models.user.findAll({
        where: {
            //conditions
        },
        include: [{
            model: Models.school,
            as: 'schools',
            through: {
                attributes: ['role_id']
            }
        }]
    })

0 个答案:

没有答案