我正在使用nodejs,sequelize和mysql。我有3个表,user,participe和tirage,我这样定义我的关联:
db.users.belongsToMany(db.tirages, {through: db.participe, foreignKey:'participantId', as: 'participatingTiragesParticipant'});
db.users.belongsToMany(db.tirages, {through: db.participe, foreignKey:'cadeauA', as: 'CadeauTirage'});
db.tirages.belongsToMany(db.users, {through: db.participe, foreignKey:'tirageUuid', as: 'participatingTiragesTirage'})
下面是participe table的模型:
module.exports = (sequelize, Sequelize) => {
const Participe = sequelize.define("participe", {
uuid: {
type: Sequelize.UUID,
primaryKey: true,
defaultValue: Sequelize.UUIDV1
},
cadeauA: {
type: Sequelize.UUID
},
participantId: {
type: Sequelize.UUID
},
tirageUuid: {
type: Sequelize.UUID
},
isAdmin: {
type: Sequelize.BOOLEAN
}
});
return Participe;
};
感谢这段代码,我添加了记录:
const user = await User.findOne({
where: {
uuid: req.body.user
}
});
const tirage = await Tirage.create(tirageOptions);
if (tirage && user) {
await user.addParticipatingTiragesParticipant(tirage, { through: { isAdmin: true } });
}
当我给一个刚创建的用户添加一个tirage时,它可以工作,但是如果我尝试在同一个用户上添加另一个tirage,它就不能工作,错误是:
errors: [
ValidationErrorItem {
message: 'undefined must be unique',
type: 'unique violation',
path: 'undefined',
value: null,
origin: 'DB',
instance: null,
validatorKey: 'not_unique',
validatorName: null,
validatorArgs: []
}
],
我在其他论坛上看到这个问题是关于续集中的m:n关联,但我没有找到任何东西来修复它。我还在我的数据库中看到我创建了一些约束:
constraints in database image
这是其中一个错误:
Error in console image
你知道该怎么做吗?
如果你需要我的项目/我使用的技术的进一步细节,不要犹豫。多谢了。
下面是为创建表participes而生成的SQL:
Executing (default): DROP TABLE IF EXISTS `participes`;
Executing (default): CREATE TABLE IF NOT EXISTS `participes` (`uuid` CHAR(36) BINARY , `cadeauA` CHAR(36) BINARY, `participantId` CHAR(36)
BINARY, `tirageUuid` CHAR(36) BINARY, `isAdmin` TINYINT(1), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, UNIQUE `participes_tirageUuid_cadeauA_unique` (`cadeauA`, `tirageUuid`), UNIQUE `participes_participantId_tirageUuid_unique` (`participantId`), PRIMARY KEY
(`uuid`)) ENGINE=InnoDB;
3条答案
按热度按时间syqv5f0l1#
我把它修好了,我不得不这样声明我的联想:
非常感谢你的帮助。
iaqfqrcu2#
使用约束:假联想
3bygqnnd3#
也许与此无关,但我也有同样的问题,你的帖子首先出现在谷歌上。因此,如果您有同样的问题,并且您的MySQL已经配置为英语,请跳过此响应。
如果你的MySQL不是用英语配置的,正则表达式将不再起作用。我不知道为什么他们不使用MySQL错误代码
当你阅读Sequelize的源代码时,在MySQL部分你可以看到产生问题的正则表达式:sequelize/packages/core/src/dialects/mysql/query.js
最简单的解决方案是用莎士比亚的语言配置你的MySQL: