node.js - SequelizeJS 如何使用 1 个模型并创建多个表?

标签 node.js sequelize.js

希望能得到一些帮助,因为我已经尝试了一切,并且在试图弄清楚在这里做什么时文档基本上完全没用。

本质上,我有一个名为 Address 的模型。 ,其中包含您期望的所有字段。

此自动创建一个名为 Addresses 的表,它本身可以正常工作。但是,我还想制作一个使用相同模型的“Address_History”表。

基本上,我希望这样在我的路由中,如果用户输入一个新地址,它将旧地址存储在历史表中,然后将新地址放入地址表中。
我可以为此编写实际代码,但我无法让这个该死的关联以我上面所说的方式工作,即使用相同模型的 2 个单独的表。

我已经尝试了所有方法,包括 as关键字,似乎所做的只是添加一个额外的列,而不是一个表。

基本上我想要这样的东西(但工作);

  User.hasOne(Address, {
    as: 'Address',
  });
  Address.belongsTo(User, {
    as: 'Address',
  });

User.hasMany(Address, {
  as: 'addressHistory',
});
Address.belongsTo(User, {
  as: 'addressHistory',
});

任何帮助是极大的赞赏。

最佳答案

as hasMany() 中的选项函数不会在您的数据库中创建新表。新建表需要调用init()define() ,它们是静态函数。但是,您可以通过模块化 ctor 和选项来保持您的代码非常干燥。例如,

const AddressCommonCtor = { 
  // your common column fields here
};
const AddressCommonOptions = {
  // options here

  // Make sure `modelName` field is not included here
  // because you want to create two different tables with different names in your DB  
};

class Address extends Model {};
class AddressHistory extends Model {};

Address.init(AddressCommonCtor, AddressCommonOptions);
AddressHistory.init(AddressCommonCtor, AddressCommonOptions);

然后你可以像这样将 Address 和 AddressHistory 与 User 关联起来:
User.hasOne(Address, {
    as: 'address',
  });
User.hasMany(AddressHistory, {
  as: 'addressHistory',
});

关于node.js - SequelizeJS 如何使用 1 个模型并创建多个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53692245/

相关文章:

node.js - 使用 Protractor 检测浏览器

node.js - 如何获取 websocket 连接的(Express 的)sessionID

typescript - 包含在级联 Sequelize 中

mysql - 使用sequelize从使用自动增量id迁移到uuid

javascript - 在 where 条件下使用 "续行包装列

javascript - Node.js 的命令行参数

javascript - Node JS 无法读取未定义的属性 'length'

javascript - Npm包如何以编程方式运行脚本

node.js - Sequelize HasMany 不起作用

mysql - Sequelize 上的热切加载关联