[英]Sequelize Many-to-many querying model
查询数据时遇到一些麻烦。 有 2 个具有多对多关系的模型。 第一个 - S3FileData,第二个 - 播放列表,它们通过 PlaylistContent 表连接。 S3FileData 还与用户连接,用户有很多播放列表。
我需要查询属于用户但未出现在用户播放列表中的 S3Files。
我有播放列表 ID,用户 ID。
我还需要 offset 和 limit 方法,所以我尝试使用 findAndCountAll 查询
但没有运气。 非常感谢您的帮助:)
您将需要包含(SQL 中的连接)来连接所有这些表。 像这样,但首先你需要交织你的模型(数据库表),它看起来像这样:
User.belongsToMany(Profile, { through: Grant });
Profile.belongsToMany(User, { through: Grant });
User.hasMany(Grant);
Grant.belongsTo(User);
Profile.hasMany(Grant);
Grant.belongsTo(Profile);
参考: https : //sequelize.org/master/manual/advanced-many-to-many.html
现在,一旦您完成连接,您将需要在findAll
(或根据要求findAllAndCount
)中使用 include 关键字来使用这些连接:
一些基本代码(您需要相应地尝试和调整,这是粗略的代码):
S3Files.findAll({
include: [
{
model: user,
attributes: ['some columns']
include: {
model: userPlaylist,
attributes: ['some columns'],
required: false
},
where: {[Op.and]: Sequelize.where(Sequelize.col('userPlaylist.userId'), 'is not' null)},
attributes: ['some columns']
]
});
最后,对于偏移和限制,您将需要LIMIT
和OFFSET
基本 SQL 逻辑
来自官方文档的偏移和限制示例片段:
Project
.findAndCountAll({
where: {
title: {
[Op.like]: 'foo%'
}
},
offset: 10,
limit: 2
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.