Итак, я бы порекомендовал вам сначала узнать о SQL отношениях, независимо от Sequelize, и вашей текущей структуре проекта, потому что мне кажется, что вам все еще не хватает базового c понимания логики c, стоящей за этими ассоциации, где они должны быть использованы и как.
Обе ваши таблицы имеют повторяющиеся поля, что не имеет смысла. Посмотрите здесь, например: https://code.tutsplus.com/articles/sql-for-beginners-part-3-database-relationships--net-8561
Что касается вашего текущего кода, я немного поиграл с ним, и это то, что я сделал (будет работать, только если вы используя model.syn c (), поскольку столбец необходимо создать автоматически. Также используйте force: true, если у вас уже есть таблицы):
module.exports = (sequelize, DataTypes) => {
const bookingHeader = sequelize.define('bookingHeader', {
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true},
abNumber: DataTypes.INTEGER,
userProfileId: DataTypes.INTEGER,
theatreId: DataTypes.STRING,
mFId: DataTypes.STRING,
createdBy: { type: DataTypes.TEXT, allowNull: true },
modifiedBy: { type: DataTypes.TEXT, allowNull: true },
status: DataTypes.STRING
}, {
tableName: 'booking_header',
// underscored: true
})
bookingHeader.associate = function (models) {
bookingHeader.hasOne(models.bookingDescription);
};
return bookingHeader;
}
Описание бронирования:
module.exports = (sequelize, DataTypes) => {
const bookingDescription = sequelize.define('bookingDescription', {
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, },
abNumber: DataTypes.INTEGER,
theatreId: DataTypes.STRING,
mFId: DataTypes.STRING,
theatreName: DataTypes.STRING,
city: DataTypes.STRING,
state: DataTypes.STRING,
playStartDate: DataTypes.DATE,
playEndDate: DataTypes.DATE,
preferredFormat: DataTypes.INTEGER,
screensInDay: DataTypes.INTEGER,
featureTypeFlag: DataTypes.TEXT,
cofeatureName: DataTypes.STRING,
exhbtrReqComment: DataTypes.STRING,
createdBy: { type: DataTypes.TEXT, allowNull: false },
modifiedBy: { type: DataTypes.TEXT, allowNull: false },
status: DataTypes.STRING
}, {
tableName: 'booking_description',
// underscored: true
})
bookingDescription.associate = function (models) {
bookingDescription.belongsTo(models.bookingHeader);
};
return bookingDescription;
}
На вашем маршруте вы можете сделать что-то вроде этого:
const {bookingHeader,bookingDescription} = models;
app.post("/booking", async (req, res, next) => {
try {
const header = await bookingHeader.create(req.body)
const headerId = header.id
await bookingDescription.create({state:'active',createdBy:'somebody',modifiedBy:'somebody',bookingHeaderId:headerId})
res.json(header);
} catch (error) {
console.log(error)
res.status(500)
}
});
Обратите внимание, что я жестко закодировал некоторые поля для описания, только для целей примера. Кроме того, возможно, что есть и «лучший» способ сделать это с помощью Sequelize, но документы действительно плохие, поэтому с этим можно справиться.