Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use sequelize to query by separate junction tables between same two tables

SQLite3- I have a users table and a songNodes table. A user can favorite songs, and a user can 'fork' songs. I have two separate junction tables that represent these unique by purpose but otherwise identical relationships.

Sequelize- The only way I know how to perform a junction query in sequelize is as follows-

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);
    })
  })
};

I have tried to research this extensively and I can not find a way to specify which junction table I want to use with the automatically generated function 'getSongNodes.' Any help/guidance would be greatly appreciated!

like image 616
tehbigdirty Avatar asked Dec 01 '25 18:12

tehbigdirty


1 Answers

I guess you have three tables which names are User, Song, SongNode. You have to define associations between these.

You can define associations like the following lines;

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
  }
});

After; you can use relations between models like this;

var myForks = function(userId, callback) {
  User
    .findOne({
      "where": { "id": userId }
     })
    .then(function(user) {
      user
        .getSongNodes()
        .then(function(songNodes) {
          callback(songNodes);
        });
    });
};

or you can like this too;

var myForks = function(userId, callback) {
  User
    .findOne({
      "where": { "id": userId },
      "include": [Song]
     })
    .then(function(user) {
      callback(user.Songs);
    });
};

I hope it works

like image 196
Ali BARIN Avatar answered Dec 04 '25 07:12

Ali BARIN



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!