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' });