rash111
rash111

Reputation: 1317

How to perform join in sails JS

I have documents of the form

challenge:

{
  "name": "challenge by abdul",
  "created_user_id": "1",
  "game_id": "123",
  "platform_id": "9857",
  "amount": 30

}

game: 
{
  "_id": "auto_generated",
  "name": "NFS",
  "version": "3",
}



platform:
{
  "_id": "auto_generated",
  "name": "ps2",
  "version": "sami"
}

I want to perform join query in sails and want result in below format

{
  "name": "challenge by abdul",
  "created_user_id": "1",
  "game_id": "123",
  "game_name":"NFS",
  "platform_name": "ps2",
  "platform_id": "9857",
  "amount": 30

}

Upvotes: 1

Views: 587

Answers (1)

Eugene Obrezkov
Eugene Obrezkov

Reputation: 2986

There is no join in Sails but populate. So you need make associations between models and populate them. Example:

// api/models/Platform.js
module.exports = {
  attributes: {
    name: {
      type: 'string'
    },

    version: {
      type: 'string'
    },

    game: {
      model: 'Game',
      via: 'platform'
    }
  }
};

// api/models/Game.js
module.exports = {
  attributes: {
    name: {
      type: 'string'
    },

    version: {
      type: 'string'
    },

    platform: {
      model: 'Platform',
      via: 'game'
    }
  }
};

You can write following code then:

// api/controllers/AnyController.js
module.exports = {
  index: function(req, res) {
    Game
      .findOne({name: 'MY_GAME'})
      .populate('platform')
      .then(function(game) {
        console.log(game); // Game model
        console.log(game.platform); // Platform model
        return game;
      })
      .then(res.ok)
      .catch(res.negotiate);
  }
};

Upvotes: 3

Related Questions