Sequelize - создайте новую запись с ассоциациями - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь создать новую запись 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)
...