如何使用sequelize将模型关联到各自的架构中?

时间:2019-02-18 10:29:22

标签: node.js postgresql sequelize.js multi-tenant

我正在使用NodeJS,Sequelize和PostgreSQL创建一个多租户Web应用程序。我正在实现共享数据库,独立的架构方法。

我有一个注册模型和一个商店模型

// Register Model
const Register = sequelize.define('register', {
    id: {
        type: DataTypes.UUID,
        unique: true,
        allowNull: false,
        primaryKey: true,
        defaultValue: uuidv4(),
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false,
    },
    isOpen: {
        type: DataTypes.BOOLEAN,
        defaultValue: false,
    },
    archivedStatus: {
        type: DataTypes.BOOLEAN,
        defaultValue: false,
    },
    archivedAt: {
        type: DataTypes.DATE,
    },
});
// Store Model
const Store = sequelize.define('store', {
    id: {
        type: DataTypes.UUID,
        unique: true,
        allowNull: false,
        primaryKey: true,
        defaultValue: uuidv4(),
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false,
    },
    tin: {
        type: DataTypes.STRING,
    },
    type: {
        type: DataTypes.ENUM('POS', 'WAREHOUSE'),
        defaultValue: 'POS',
    },
    phone: {
        type: DataTypes.INTEGER,
    },
    archivedStatus: {
        type: DataTypes.BOOLEAN,
        defaultValue: false,
    },
    archivedAt: {
        type: DataTypes.DATE,
    },
});

它们之间的关联是

Register.belongsTo(Store);
Store.hasMany(Register);

在租户注册时,我正在使用子域创建一个架构,然后将所有模型同步到该架构。

await sequelize.createSchema(subdomain);
await register.schema(subdomain).sync(); // Register Model
await store.schema(subdomain).sync(); // Store Model

它应该在其中subdomain的“ storeId”。registers应该是subdomain的主键的模式内生成“ registers”和“ stores”表。 }。

但是,当在架构内部创建表时,stores上的storeId。subdomainregisterspublic的主键。

所有其他关联都在发生这种情况。我尝试在Sequelize文档上进行搜索,阅读了Sequelize上的多个问题,但找不到任何解决方案。

任何帮助将不胜感激。谢谢。

0 个答案:

没有答案