Postgresql 如何使sequelize在生成获取n:m关联模型的SQL时不使用时间戳字段?

Postgresql 如何使sequelize在生成获取n:m关联模型的SQL时不使用时间戳字段?,postgresql,sequelize.js,postgresql-11,Postgresql,Sequelize.js,Postgresql 11,我的模型: 'use strict'; module.exports = (sequelize, DataTypes) => { const Vendor = sequelize.define('Vendor', { id: { type: DataTypes.INTEGER, allowNull: false, autoIncrement: true, primaryKey: true }, // other fields }, {});

我的模型:

'use strict';
module.exports = (sequelize, DataTypes) => {
    const Vendor = sequelize.define('Vendor', {
        id: { type: DataTypes.INTEGER, allowNull: false, autoIncrement: true, primaryKey: true },
        // other fields
    }, {});
    Vendor.associate = function (models) {
        Vendor.belongsToMany(models.Corporate, { through: 'VendorCorporates', foreignKey: 'vendorId' });
    };
    return Vendor;
};

以及关联(链接)表的迁移:

现在,当我尝试获取与供应商关联的公司时:

let vendor = await models.Vendor.findByPk(pk);
let corporates = await vendor.getCorporates();
查询失败,因为sequelize生成的SQL包含字段
updatedAt
createdAt
。我如何告诉sequelize在没有时间戳字段的情况下生成SQL


澄清:我希望在
公司
供应商
模型中有时间戳,但在链接/关联表中没有时间戳,我希望相应地生成联接查询(
供应商.getCorporates()
)。

您可以使用时间戳选项来指示这一点。例如:

const Corporate = sequelize.define('Corporate', {
        id: { type: DataTypes.INTEGER, allowNull: false, autoIncrement: true, primaryKey: true },
        // other fields
    }, {
      timestamps: false
});

通过为
n:m
关联本身编写一个模型,最终解决了这个问题:

'use strict';
module.exports = (sequelize, DataTypes) => {
    const VendorCorporate = sequelize.define('VendorCorporate', {
        vendorId: DataTypes.INTEGER,
        corporateId: DataTypes.INTEGER
    }, { timestamps: false });
    VendorCorporate.associate = function (models) {
        // associations can be defined here
    };
    return VendorCorporate;
};
和改变:

// db/models/vendor.js

Vendor.belongsToMany(models.Corporate, { through: 'VendorCorporates', foreignKey: 'vendorId' });
致:


并在
公司
模型文件中进行类似更改。

这将不会在
公司
模型中创建时间戳。我希望在
公司
供应商
模型中有时间戳,但在链接/关联表中没有时间戳,我希望相应地生成联接查询。只需在供应商公司模型中指示时间戳:false
'use strict';
module.exports = (sequelize, DataTypes) => {
    const VendorCorporate = sequelize.define('VendorCorporate', {
        vendorId: DataTypes.INTEGER,
        corporateId: DataTypes.INTEGER
    }, { timestamps: false });
    VendorCorporate.associate = function (models) {
        // associations can be defined here
    };
    return VendorCorporate;
};
// db/models/vendor.js

Vendor.belongsToMany(models.Corporate, { through: 'VendorCorporates', foreignKey: 'vendorId' });
Vendor.belongsToMany(models.Corporate, { through: models.VendorCorporate, foreignKey: 'vendorId' });