Reputation: 9
Im trying to make a intermediate table between 2 models, called User and Reminder. The fact is everytime i try to migrate or create the table UserReminders I dont get 2 foreing keys, userId and reminderId, instead I only get ONE foreing key, which is reminderId.
This is what appears on my table on heidiSQL
I created a model on my backend called UserReminder and the migration of it for my database on HeidiSQL.
MODEL:
import { Model } from 'sequelize'
const loadModel = (sequelize, DataTypes) => {
class UserReminder extends Model {
static associate (models) {
// Un UserReminder pertenece a un usuario
UserReminder.belongsTo(models.User, { foreignKey: 'userId', onDelete: 'CASCADE' })
// Un UserReminder pertenece a un recordatorio
UserReminder.belongsTo(models.Reminder, { foreignKey: 'reminderId', onDelete: 'CASCADE' })
}
}
UserReminder.init({
userId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: 'Users',
key: 'id'
},
onDelete: 'CASCADE',
onUpdate: 'CASCADE'
},
reminderId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: 'Reminders',
key: 'id'
},
onDelete: 'CASCADE',
onUpdate: 'CASCADE'
},
createdAt: {
allowNull: false,
type: DataTypes.DATE,
defaultValue: DataTypes.NOW
},
updatedAt: {
allowNull: false,
type: DataTypes.DATE,
defaultValue: DataTypes.NOW
}
}, {
sequelize,
modelName: 'UserReminder',
tableName: 'UserReminders',
timestamps: true,
indexes: [
{
unique: true,
fields: ['userId', 'reminderId']
}
]
})
return UserReminder
}
export default loadModel
MIGRATION:
'use strict'
/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up (queryInterface, Sequelize) {
await queryInterface.createTable('UserReminders', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
userId: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: 'Users',
key: 'id'
},
onDelete: 'CASCADE'
},
reminderId: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: 'Reminders',
key: 'id'
},
onDelete: 'CASCADE'
},
createdAt: {
allowNull: false,
type: Sequelize.DATE,
defaultValue: Sequelize.fn('now')
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE,
defaultValue: Sequelize.fn('now')
}
})
await queryInterface.addConstraint('UserReminders', {
fields: ['userId', 'reminderId'],
type: 'unique',
name: 'unique_user_reminder'
})
},
async down (queryInterface, Sequelize) {
await queryInterface.dropTable('UserReminders')
}
}
I was expecting to have 1 primary key called id, 2 foreing keys userId and reminderId, and one unique key compound (userId, reminderId). But i got the things I said but with only ONE foreing key (reminderId) instead of 2.
Upvotes: 0
Views: 27