gpt4 book ai didi

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

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

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

本质上,我有一个名为 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/

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