【问题标题】:Use sequelize to query by separate junction tables between same two tables使用 sequelize 通过相同两个表之间的单独联结表进行查询
【发布时间】: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 多对多关系

标签: node.js sqlite sequelize.js


【解决方案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 应该支持这一点。
猜你喜欢
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
  • 2012-09-14
  • 2015-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多