使用 sequelize 通过相同两个表之间的单独联结表进行查询
Posted
技术标签:
【中文标题】使用 sequelize 通过相同两个表之间的单独联结表进行查询【英文标题】:Use sequelize to query by separate junction tables between same two tables 【发布时间】:2015-11-05 10:44:42 【问题描述】:SQLite3- 我有一个 users 表和一个 songNodes 表。用户可以喜欢歌曲,并且用户可以“分叉”歌曲。我有两个单独的联结表,它们按目的表示这些唯一但在其他方面相同的关系。
Sequelize- 我知道如何在 sequelize 中执行联结查询的唯一方法如下-
var myForks = function(userId, callback)
User.findOne(
where:
id: userId
)
.then(function(userObj)
userObj.getSongNodes() //this is where I need to specify
.then(function(stuff) //a junction table
callback(stuff);
)
)
;
我已尝试对此进行广泛研究,但找不到指定要与自动生成的函数“getSongNodes”一起使用的联结表的方法。任何帮助/指导将不胜感激!
【问题讨论】:
你也可以显示关联吗? 'users' 和 'songNodes' 之间通过'favorite'、'fork' 和'upvote' 3 多对多关系 【参考方案1】:我猜你有三个表,分别是 User、Song、SongNode。您必须定义它们之间的关联。
您可以定义如下几行的关联;
models.User.belongsToMany(models.Song,
"constraints": false,
"foreignKey": "userId",
"through":
model: models.SongNode,
unique: false
);
models.Song.belongsToMany(models.User,
"constraints": false,
"foreignKey": "songId",
"through":
model: models.SongNode,
unique: false
);
之后;你可以像这样使用模型之间的关系;
var myForks = function(userId, callback)
User
.findOne(
"where": "id": userId
)
.then(function(user)
user
.getSongNodes()
.then(function(songNodes)
callback(songNodes);
);
);
;
或者你也可以喜欢这个;
var myForks = function(userId, callback)
User
.findOne(
"where": "id": userId ,
"include": [Song]
)
.then(function(user)
callback(user.Songs);
);
;
我希望它有效
【讨论】:
我有用户表和 SongNodes 表。我有 3 个用于这 2 个表的联结表(用户有许多“最喜欢的”歌曲节点/歌曲节点被许多用户喜爱,“叉子”和“upvote”的关系相同)。我暂时编写了原始查询,但我认为 ORM 应该支持这一点。以上是关于使用 sequelize 通过相同两个表之间的单独联结表进行查询的主要内容,如果未能解决你的问题,请参考以下文章
如何在Nodejs中使用Sequelize在没有公共列的两个表上进行INNER JOIN?