Составной первичный ключ в соединительной таблице - Sequelize

Работая с Sequelize и базой данных MySQL, я пытался добиться комбинации составных первичных ключей в таблице соединений, но, к сожалению, безрезультатно.

У меня есть таблицы:

введите здесь описание изображения

Они относятся ко многим. В таблице соединений user_has_project мне нужна комбинация двух первичных ключей: user_id и project_id.

Определение модели секвелизации:

Пользователь:

module.exports = function(sequelize, Sequelize) {

    var User = sequelize.define('user', {
        id: {
            autoIncrement: true,
            primaryKey: true,
            type: Sequelize.INTEGER(11)
        },

        name: {
            type: Sequelize.STRING(100),
            allowNull: false
        }
    },{
        timestamps: false,
        freezeTableName: true,
        underscored: true
});

User.associate = function (models) {
    models.user.belongsToMany(models.project, {
        through: 'user_has_project',
        foreignKey: 'user_id',
        primaryKey: true
    });
};

    return User;
}

Проект:

module.exports = function(sequelize, Sequelize) {

    var Project = sequelize.define('project', {
        id: {
            autoIncrement: true,
            primaryKey: true,
            type: Sequelize.INTEGER(11)
        },

        name: {
            type: Sequelize.STRING(100),
            allowNull: false
        }
    },{
        timestamps: false,
        freezeTableName: true,
        underscored: true
    });


Project.associate = function (models) {
    models.project.belongsToMany(models.user, {
        through: 'user_has_project',
        foreignKey: 'project_id',
        primaryKey: true
    });
};

    return Project;
}

Я пытался «принудительно» определить первичные ключи в таблице user_has_project, используя «primaryKey: true» в ассоциации обеих моделей, но определение выше создает только user_id как PRI и project_id как MUL


person Marcin    schedule 18.03.2018    source источник


Ответы (1)


Что такое версия Sequelize? Я тестировал Sequelize 4 в sqlite3, определение выше делает запрос

CREATE TABLE IF NOT EXISTS `user_has_project` (`created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, `user_id` INTEGER(11) NOT NULL REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, `project_id` INTEGER(11) NOT NULL REFERENCES `project` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (`user_id`, `project_id`));

"ПЕРВИЧНЫЙ КЛЮЧ (user_id, project_id)" то, что вы хотите?

person eseom    schedule 18.03.2018
comment
Я использую Sequelize 4.33.4. Я тестировал его, и он работал раньше, проблема была с приложением, которое я использую «Sequel Pro», в сводке таблица отображается как MUL, но на самом деле они оба PRI. Я пошел в phpMyAdmin, чтобы проверить, и все было правильно. В любом случае спасибо за ответ. - person Marcin; 18.03.2018