Я пытаюсь создать новую запись MySQL с Sequelize, используя ассоциации, которые я описал ранее. Поэтому я не могу понять, что я делаю неправильно, и документы мне вообще не помогают.
Это миграция моих контактов:
up: function up(queryInterface, Sequelize) {
return queryInterface.createTable('contacts', {
id: {
type: Sequelize.UUID,
primaryKey: true,
unique: true
},
name: {
allowNull: true,
type: Sequelize.STRING,
},
contact_owner_id: {
allowNull: false,
primaryKey: true,
type: Sequelize.UUID,
},
app_user_id: {
primaryKey: true,
type: Sequelize.UUID,
references: {
model: 'user',
key: 'id',
},
},
phone_number: {
type: Sequelize.STRING,
},
email: {
type: Sequelize.STRING,
allowNull: true,
},
created_at: {
allowNull: false,
type: Sequelize.DATE
},
updated_at: {
allowNull: false,
type: Sequelize.DATE
}
}).then(() => queryInterface.addConstraint('contacts',
['app_user_id'],
{
type: 'FOREIGN KEY',
name: 'FK_contacts_user_id',
references: {
table: 'users',
field: 'id',
},
onDelete: 'CASCADE',
onUpdate: 'no action',
allowNull: true
})
)
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('contacts')
}
}
и это логика определения модели
db.Contact.hasMany(db.User, {
foreignKey: { allowNull: true, name: 'id' },
onDelete: 'CASCADE',
})
также метод создания новой записи с моделью
return sequelize.define('Contact', {
id: {
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4,
primaryKey: true,
unique: true
},
name: {
allowNull: true,
type: Sequelize.STRING,
},
ownerId: {
field: 'contact_owner_id',
allowNull: false,
primaryKey: true,
type: Sequelize.UUID,
},
appUserId: {
field: 'app_user_id',
allowNull: true,
defaultValue: null,
type: Sequelize.UUID,
},
phone: {
field: 'phone_number',
type: Sequelize.STRING,
},
email: {
type: Sequelize.STRING,
allowNull: true,
},
createdAt: {
field: 'created_at',
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
field: 'updated_at',
allowNull: false,
type: Sequelize.DATE
}
}, {
tableName: 'contacts',
timestamps: true
})
Метод:
await Contact.create({
ownerId: req.headers.user.id,
name,
phone,
appUserId
})
и я продолжаю получать ту же ошибку:
Cannot add or update a child row: a foreign key constraint fails (`backend`.`contacts`, CONSTRAINT `contacts_ibfk_1` FOREIGN KEY (`id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)