我已经阅读了this个问题并且没有帮助我,所以我问自己的问题:
假设我使用Sequelize和MariaDB通过表连接了2个表:
User <-- UserItem --> Item
单个用户可以拥有多个项目,单个项目可以属于许多用户。但我需要一个自定义直通属性来存储项目的数量,我们称之为苹果。因此,根据docs,这将是定义:
var UserItem = Sequelize.define('UserItem', {
quantity: DataTypes.INTEGER
},
timestamps: false
});
models.Item.belongsToMany(models.User, {through: 'UserItem'});
models.User.belongsToMany(models.Item, {through: 'UserItem'});
然后我添加了一个与之相关的新关系:
User.addItem(item, { quantity: 0 });
这可以按预期工作。但是,如果我需要更新物品的数量怎么办?我可以做到以下几点:
User.addItem(item, { quantity: 20 });
如果存在,我的物品的数量将更新为20,否则将插入。我不想要这个。我想要这样的东西:
User.addItem(item, { quantity: quantity + 1 });
但是由于无法对连接表进行查询,我无法使用以前的值获取特定的NM行进行更新。
我怎样才能做到这一点?提前谢谢。
答案 0 :(得分:0)
您仍然拥有docs。
中指定的联接表DAO在这种情况下,您需要知道item
是否是新关联。
所以它看起来像。
User.hasItem( item )
.then( exists => {
if ( !exists ) {
return User.addItem( item, { quantity : 20 } )
} else {
item.UserItem.quantity += 1;
return item.UserItem.save();
}
} )
您还可以阅读有关hasAssociation in the docs的更多信息。