【问题标题】:Sequelize: Creating to-many relationshipsSequelize:创建多对多关系
【发布时间】:2016-10-02 22:30:11
【问题描述】:

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

User 
    id
    name

Auth:
    id
    token

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

一个User 可以与Auth 有多个Authto-many 关系。

一个Auth只能与User有一个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

我做错了什么?

【问题讨论】:

    标签: javascript mysql node.js sequelize.js


    【解决方案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]
    })
    

    您可能需要查看 sequelize 文档中的 one-to-manyhasOne 关系和 hasManyhasOne API 以了解更多信息。

    【讨论】:

    • 谢谢。如何取回与一个User 关联的所有Auth 记录的数组? User 表不应该有一个名为Auths 的字段吗?
    • 您只需要一个表中的引用,而不是两者,并且在查询中您会告诉它包含第二个模型。我还在帖子中添加了一个查询示例。
    猜你喜欢
    • 2022-12-15
    • 2014-09-12
    • 2020-10-31
    • 2017-05-18
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    相关资源
    最近更新 更多