gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:23:45 25 4
gpt4 key购买 nike

我只是从 Sequelize 3.x 升级到 4.x,并试图抑制自己沮丧地撕掉我头上的所有头发。

它是这样的:
在版本 3 及以下版本中,当关联模型时,我们会创建看起来像这样的模块文件:

[文件[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;
};

现在“升级”到版本 4 ( http://docs.sequelizejs.com/manual/tutorial/upgrade-to-v4.html ) classMethods已被删除,让我无法引用外部模型!

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

注意:我尝试从他们的文档中添加指定的方法,但它不起作用:
// model declaration code...
User.associate = function ( models ) {
User.hasOne ( models.company, ... );
};

附加说明:是的,我所有的依赖项都已安装并正常工作。我的 [文件 [project root]/models/index.js ] 正确地拉入了我所有的模型。只有关联/外键没有被创建。

最佳答案

我了解您说它不起作用,但是使用 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

关于sequelize.js - 如何将关联方法从 Sequelize 3.x 升级到 4.x?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48194490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com