【发布时间】:2016-12-03 13:34:24
【问题描述】:
我正在使用 Sequelize for Node 并且我有用户和项目。用户可以通过多种方式与项目交互,例如投票或表扬(在这种情况下是两种不同的方式)。
我最初的想法是建立两个不同的多对多关系,但 Sequelize 只有一个 removeItem 调用,我还没有弄清楚如何指定哪个。
计划 2 是用一个额外的元素“类型”构建一个多对多表,以便我可以指定类型。我可以在添加事物时指定类型。这遇到了两个问题,一个是外键,默认情况下这对是唯一的。我通过从数据库中手动删除约束来纠正这个问题,这似乎就足够了(我将 id 设置为主键自动增量)。其次,我似乎无法弄清楚如何让删除指定 where type = 我想要的类型。
代码:
要建表:
var UserActions = sequelize.define('userActions', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
type: DataTypes.STRING
});
删除项目:
models.Item.findOne({where: {id : params.itemID}}).then(function (video){
models.User.findOne({where: {id : params.itemID}}).then(function (user){
if(params.applaud == "true") {
console.log("Add applaud");
user.addItem(video,{type:"commend"});
} else {
user.removeItem(item,{where: {type:"commend"}});
console.log("Remove, Commendation");
}
res.json({'response' : 'Success'});
});
});
问题是这将删除项目和用户之间的所有交互,当我希望它只删除表扬时。
如何最好地管理 Sequelize 中相同两个表之间的多个多对多关系?
【问题讨论】:
-
它叫Sequelize
-
我更正了,谢谢。
-
你是说 Sequelize 妨碍了 MySQL 的使用?
标签: javascript node.js database sequelize.js mariadb