三通关系 [英] Three way relationship
问题描述
创建以下关系
bookmark.belongsToMany(tag, {through: 'BookmarkTag'});user.belongsToMany(bookmark, {through: 'UserBookmark'});
将创建两个关系表
BookmarkTag|bookmarkId|tagId
用户书签|bookmarkId|userId
我希望 BookmarkTag 也包含用户 ID,以便我知道哪个用户向哪个书签添加了标签
i would like BookmarkTag to contain user id aswell so that i know which user added a tag to which bookmark
书签标签
|bookmarkId|tagId|userId
|bookmarkId|tagId|userId
是否可以通过续集关联来实现
is that possible through sequelize associations
完整代码
var bookmark = sequelize.define('Bookmark', {
name: Sequelize.STRING,
url: Sequelize.STRING
});
var tag = sequelize.define('Tag', {
value: Sequelize.STRING
});
var user = sequelize.define('User', {
email: Sequelize.STRING
});
bookmark.belongsToMany(tag, {through: 'BookmarkTag'});
user.belongsToMany(bookmark, {through: 'UserBookmark'});
sequelize.sync();
推荐答案
如果您明确定义 BookmarkTag 表,您可以为其添加额外的属性:
If you define the BookmarkTag table explicitly you can add extra attributes to it:
BookmarkTag = sequelize.define('BookmarkTag', {
userId: Sequelize.INTEGER
});
bookmark.belongsToMany(tag, {through: BookmarkTag});
请注意,我们传递的是对 BookmarkTag 模型的引用,而不是这里的字符串.
Notice that we are passing a reference to the BookmarkTag model, not a string here.
要在标签上设置用户 ID,您在执行 addTag
To set a userid on the tag, you pass an extra object when doing addTag
Bookmark.addTag(tag, { userId: 42 });
这篇关于三通关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!