eptgrant
eptgrant

Reputation: 119

How to add another field in a join sails js

Hey all just getting started with Sails js and mongoDB and im a bit confused.

I have two models with a many-to-many relationship:

User.js

module.exports = {
  attributes: {
    username: 'STRING',
    password: 'STRING',
    doors:{
        collection: 'door',
        via: 'users',
    }
  }
};

and Door.js

module.exports = {
  attributes: {
    name: 'STRING',
    users:{
        collection: 'user',
        via: 'doors'
    }
  }
};

This works fine, I can create a user and a door and associate one with the other. However I'd like to have another field in the join, an expiry date (Say the user can only have access to a particular door until a particular date).

How would I go about doing that?

Upvotes: 1

Views: 155

Answers (1)

Meeker
Meeker

Reputation: 5979

You need to create a many to many through association. However they are not officially supported as of yet.

You can manually do this however.

Now, in this example it may sometimes be a a little more difficult to get all the doors for a user and vice versa, because you have to preform a second look up. However you can do the following with this setup:

UserDoors
    .find()
    .where({expires:{'<':new Date()}})
    .populate('doors')
    .populate('users')
    .exec(/*....*/)

Your models

User.js

module.exports = {
  attributes: {
    username: 'STRING',
    password: 'STRING',
    doors:{
        collection: 'userDoors',
        via: 'users',
    }
  }
};


userDoors.js
module.exports = {
  attributes: {
    doors:{
        model: 'door'
    },
    users:{
        model: 'user'
    },
    expires: 'datetime'   
  }
};



and Door.js

module.exports = {
  attributes: {
    name: 'STRING',
    users:{
        collection: 'userDoors',
        via: 'doors'
    }
  }
};

Do a google search for sails.js many to many through to also help you find what your looking for.

Upvotes: 1

Related Questions