使用 sequelize 关联不同的模型?

Posted

技术标签:

【中文标题】使用 sequelize 关联不同的模型?【英文标题】:Associate different models using sequelize? 【发布时间】:2018-01-12 02:24:33 【问题描述】:

您好,我正在尝试将我的用户模型与登录模型和 Question_details 模型相关联。但是如果我使用 Question_details 关联,那么我会收到 eagerLodingError :user is not associated to login 但如果我正在评论它那么它可以正常工作我怎么能关联它?

但如果我与

User Model

    module.exports = (sequelize, DataTypes) => 
        var Users = sequelize.define('users', 
            name: 
                type: DataTypes.STRING(100)
             
            phone: 
                type: DataTypes.BIGINT,
                unique: true
            
        ,  freezeTableName: true );

        Users.associate = function(models) 
            Users.hasOne(models.login, 
                foreignKey: 'user_id',
                as: 'loginDetails'
            );
        ;

        Users.associate = function(models) 
            Users.hasMany(models.customer_query, 
                foreignKey: 'user_id',
                as: 'queryDetails'
            );
        ;

        return Users;
    ;

登录模式

module.exports = (sequelize, DataTypes) => 
    var Login = sequelize.define('login', 
        user_id: 
            type: DataTypes.INTEGER
        ,
        user_name: 
            type: DataTypes.STRING(500),
            isEmail: true
        ,
        password: 
            type: DataTypes.STRING(500)
        ,
        role_id: 
            type: DataTypes.INTEGER
        
    , 
        underscored: true,
        freezeTableName: true
    );

    Login.associate = function(models) 
        Login.belongsTo(models.users, 
            foreignKey: 'user_id',
            onDelete: 'CASCADE'
        );
    ;
    Login.associate = function(models) 
        Login.belongsTo(models.roles, 
            foreignKey: 'role_id',
            onDelete: 'CASCADE'
        );
    ;
    return Login;

;

问题详情模型

    module.exports = function(sequelize, DataTypes) 
        var questionDetails = sequelize.define('question_details', 
            query_id: 
                type: DataTypes.INTEGER
            ,
            ques_type_id: 
                type: DataTypes.INTEGER
            ,
            created_by: 
                type: DataTypes.INTEGER
            ,
            question: 
                type: DataTypes.TEXT
            ,

        ,  freezeTableName: true );

 questionDetails.associate = function(models) 
            questionDetails.belongsTo(models.users, 
                foreignKey: 'created_by',
                onDelete: 'CASCADE'
            );
        ;

        return questionDetails;
    ;

【问题讨论】:

【参考方案1】:

您只需定义一次关联。当您第二次定义它时,您实际上是在覆盖它。所以对于User 模型,你实际上应该这样做......

    Users.associate = function(models) 
      Users.hasOne(models.login, 
        foreignKey: 'user_id',
        as: 'loginDetails'
      );

      Users.hasMany(models.customer_query, 
        foreignKey: 'user_id',
        as: 'queryDetails'
      );
    ;

对您的登录模型执行类似操作,因为您还在那里覆盖了associate 函数。

祝你好运! :)

【讨论】:

我在 sequelize 文档中的任何地方都找不到关联函数或类似 Model.associate = function(models) 的任何语法。谁能帮我在文档或任何地方找到有关关联功能的详细信息。 @AbhishekKumar Users.associate 是我们为将这些关系添加到模型而创建的自定义函数。我们必须这样做,因为在所有模型都导入 Sequelize 之后,我们需要调用 associate 函数。有关示例,请参见 github.com/sequelize/express-example/blob/master/models/…。 我的问题几乎相同,但很少嵌套,jsfiddle.net/j74rt9y1/1 第二个关联不起作用,没有错误,任何人都可以帮忙吗? @DylanAspden 如何为用户创建登录记录? 这里是完整的解释它是如何完成的codebysamgan.com/…

以上是关于使用 sequelize 关联不同的模型?的主要内容,如果未能解决你的问题,请参考以下文章

Sequelize 从 belongsTo 关系中获取值

使用 Sequelize.js 进入包含模型

使用 Typescript 在 Sequelize 模型中创建实例方法

更改数据库模型 - Sequelize

如何使用 sequelize 建立模型属于多关联

使用把手显示来自 sequelize 查询的值