Составной первичный ключ в распределительной таблице - Sequelize
Работая с базами данных Sequelize и MySQL, я пытался добиться составной комбинации первичных ключей в соединительной таблице, но, к сожалению, безрезультатно.
У меня есть таблицы:
Они по отношению многие ко многим. В соединительной таблице user_has_project я хочу комбинацию двух первичных ключей: user_id и project_id.
Определение модели Sequelize:
Пользователь:
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
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
)" то, что ты хочешь?