三通关系 [英] Three way relationship

查看:50
本文介绍了三通关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

创建以下关系

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆