首页 文章

Sequelize:创建多对多的关系

提问于
浏览
0

我在Node中使用Sequelize并且有一个表名 UserAuth

User 
    id
    name

Auth:
    id
    token

我想为这个模型添加关系 .

UserAuth 有很多 Authto-many 关系 .

AuthUser 只能有一个 Userto-one 关系 .

我在我的模型文件中有一个类实例,我用它来创建与以下代码的关系:

tableName: 'User',
            classMethods: {
                associate: function (models) {
                    user.belongsToMany(user, { through: { model: models.auth }, as: `user` })
                }

此代码在 Auth 中创建一个名为 userId 的字段 .

我希望得到的是以下内容:

User 
    id
    name
    auths //an array that will contain all instances of Auth by this User

Auth:
    id
    token
    user //an object of User to whom this Auth object belongs to

我究竟做错了什么?

1 回答

  • 1

    尝试一下:

    var User = sequelize.define('User', {
        ...
        classMethods: {
            associate: function (models) {
                User.hasMany(models.Auth, {as: 'auths'});
            }
        }
    };
    
    
    var Auth = sequelize.define('Auth', {
        ...
        classMethods: {
            associate: function (models) {
                Auth.belongsTo(models.User, {as: 'user'});
            }
        }
    };
    

    这会将 userId 列添加到 auth 表中 .

    要查询它(请注意查询中的 include ),您也可以反之亦然:

    User.findOne({
        include: [Auth]
    })
    

    您可能需要查看one-to-manyhasOne关系的sequelize文档和hasManyhasOne API以获取更多信息 .

相关问题