【问题标题】:How to add many to many association in existing models in sequelize node.js?如何在 sequelize node.js 中的现有模型中添加多对多关联?
【发布时间】:2017-07-01 02:54:21
【问题描述】:

我想使用 sequelize 在我的节点应用程序中添加多对多关联。我是sequelize ORM的新手。

我有一个 eixsting 模型 user.js。我想创建新的模型项目并添加想要的多对多关联

为此,我运行了 sequelize create table 并创建了迁移 现在在关联部分,我所做的多对多关联创建

我找到了多个这样做的

Project.belongsToMany(User, {through: 'UserProject'});

但是我在哪里写 User.belongsToMany(Project, {through: 'UserProject'}); 因为用户模型已经存在

第二件事我想知道UserProject是自动创建还是需要手动创建?

【问题讨论】:

    标签: javascript node.js associations sequelize.js


    【解决方案1】:

    使用sequelize-clisequelize init 工具是一个很好的做法,该工具会创建一个文件,将所有模型聚集在一起并在它们之间创建关联。关联是通过类方法associate 完成的,它应该在您的所有模型中实现(与其他模型有关联)。

    此方法可能如下所示(在User 模型的情况下):

    classMethods: {
        associate: function(models){
            this.belongsToMany(models.Project, { through: 'UserProject' });
        }
    }
    

    Project 模型中等效:

    classMethods: {
        associate: function(models){
            this.belongsToMany(models.User, { through: 'UserProject' });
        }
    }
    

    如果您不想在UserProject 表中添加任何其他额外字段,它将使用字段UserIdProjectId 自动创建(如果您使用sequelize.sync() 方法 - 否则您必须创建迁移文件中的表)。在其他情况下,当您想添加其他字段时,您必须自己创建这样的模型。

    【讨论】:

    • 我明白你的回答,但问题是用户模型已经创建并且它的迁移正在运行。我如何添加 this.belongsToMany(models.Project, { through: 'UserProject' });在用户关联中
    • 取决于您的模型是如何创建的(您可以在编辑中附加这部分代码)。无论如何,您需要为UserProject 表创建新的迁移文件以在数据库中创建关系。
    • 在UserProject中不需要给任何关联?
    • 在模型中还是在数据库表中?如果是数据库表,在迁移文件中,您至少需要创建userIdprojectId,它们是usersprojects 表的外键。
    • 在模型中......就像我们在上面的用户和项目表关联中所做的那样
    猜你喜欢
    • 2021-08-02
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 2021-04-24
    • 1970-01-01
    相关资源
    最近更新 更多