首页 文章

如何将关联方法从Sequelize 3.x升级到4.x?

提问于
浏览
0

我只是从Sequelize 3.x升级到4.x,我正在努力克制自己在挫折中撕掉我头上的所有头发 .

在这里:在版本3及更低版本中,当关联模型时,我们将创建模块文件,看起来有点像这样:

[file [project root]/models/user.js ]

module.exports = function ( db, Sequelize ) {
    let User = db.define ( 'user', {
        user_id: {
            primaryKey: true,
            autoIncrement: true,
            type: Sequelize.INTEGER.UNSIGNED
        },
        company_id: {
            type: Sequelize.INTEGER.UNSIGNED,
            allowNull: false
        },
        created_at: {
            type: Sequelize.DATE,
            allowNull: false,
            defaultValue: Sequelize.NOW
        }
    }, {
        classMethods: {
            associate: function ( models ) {
                User.hasOne ( models.company, { as: 'company', foreignKey: 'company_id' });
            }
        }
    });
    return User;
};

现在为"upgrade"到版本4(http://docs.sequelizejs.com/manual/tutorial/upgrade-to-v4.htmlclassMethods 已被删除,让我无法引用外部模型!

有没有人能够弄清楚如何在Sequelize v4.x中正确构建和维护关联?


注意:我已尝试从其文档中添加指定的方法,但它不起作用:

// model declaration code...
User.associate = function ( models ) {
    User.hasOne ( models.company, ... );
};

附加说明:是的,我的所有依赖项都已安装并正常运行 . 我的[文件 [project root]/models/index.js ]正在拉我的所有模特 . 它只是未创建的关联/外键 .

1 回答

  • 1

    我知道你说它不起作用,但是使用v4以下工作

    // Class Method
    Model.associate = function (models) {
        ...associate the models
    };
    

    编辑:为了证明,我完全按照你的代码 . 假设你使用的是mysql

    module.exports = (sequelize, DataTypes) => {
      const User = sequelize.define('uzer', {
        user_id: {
          primaryKey: true,
          autoIncrement: true,
          type: DataTypes.INTEGER.UNSIGNED
        },
        company_id: {
          allowNull: false,
          type: DataTypes.INTEGER.UNSIGNED
        },
        created_at: {
          type: DataTypes.DATE,
          allowNull: false,
          defaultValue: DataTypes.NOW
        }
      });
    
      User.associate = function (models) {
        User.hasOne(models.company, {
          foreignKey: 'company_id',
          as: 'company',
        });
      };
    
      return User;
    };
    

    你没有提供公司模型,但我认为它是类似的

    module.exports = (sequelize, DataTypes) => {
      const Company = sequelize.define('company', {
        name: {
          type: DataTypes.STRING
        }
      });
    
      return Company;
    };
    

    这会生成SQL

    Executing (default): CREATE TABLE IF NOT EXISTS `uzers` (`user_id` INTEGER UNSIGNED auto_increment , `company_id` INTEGER UNSIGNED NOT NULL, `created_at` DATETIME NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`user_id`)) ENGINE=InnoDB;
    
    Executing (default): CREATE TABLE IF NOT EXISTS `companies` (`id` INTEGER NOT NULL auto_increment , `name` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `company_id` INTEGER UNSIGNED, PRIMARY KEY (`id`), FOREIGN KEY (`company_id`) REFERENCES `uzers` (`user_id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB;
    

    然后给出数据库表

    See database diagram

    并列出参考

    See database reference

相关问题