希望能得到一些帮助,因为我已经尝试了一切,并且在试图弄清楚在这里做什么时文档基本上完全没用。
本质上,我有一个名为 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/