繁体   English   中英

Sequelize 多对多查询模型

[英]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']
  ]
});

最后,对于偏移和限制,您将需要LIMITOFFSET基本 SQL 逻辑

来自官方文档的偏移和限制示例片段:

Project
  .findAndCountAll({
     where: {
        title: {
          [Op.like]: 'foo%'
        }
     },
     offset: 10,
     limit: 2
  })

相同的参考: https : //sequelize.org/v5/manual/models-usage.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM