sails-sequelize-nested

0.0.1 • Public • Published

Sails Sequelize Nested

A simple helper, allows you to do nested creates with Sequelize + Sails.

Installation

Motivation

As you may notice, nested create can be really tricky with sequelize. You have to include all nested associations like so:

Product.create({
  title: 'Chair',
  user: {
    first_name: 'Mick',
    last_name: 'Broadstone',
  }
}, {
  include: [{ association: Product.User }]
});

Things are getting even more complicated if you have an association including another association.

Product.create({
  title: 'Chair',
  user: {
    first_name: 'Mick',
    last_name: 'Broadstone',
    address: {
      city: 'Austin',
      state: 'TX',
      zip: '78704'
    }
  }
}, {
  include: [{
    association: Product.User,
    include: [ User.Address ]
  }]
});

You constantly need to track all includes. I don't really understand why it was made that complicated way in sequelize. You can read all includes from the schema, and add it if needed automatically.

That module solves this problem by extending sails models with nested methods.

Avaliable methods

  • Model.createNested(record)
Argument Type Details
1 model String A model name.
2 record Object An Object that is to be created.

Returns: Promise

Usage

Consider the following models:

const Product = this.sequelize.define('product', {
  title: Sequelize.STRING
});
const User = this.sequelize.define('user', {
  first_name: Sequelize.STRING,
  last_name: Sequelize.STRING
});
const Address = this.sequelize.define('address', {
  city: Sequelize.STRING,
  state: Sequelize.STRING,
  zip: Sequelize.STRING,
});

Product.User = Product.belongsTo(User);
User.Address = User.belongsTo(Address);

A new Product, User, and Address can be created in one step in the following way:

Product.createNested({
  title: 'Chair',
  user: {
    first_name: 'Mick',
    last_name: 'Broadstone',
    address: {
      city: 'Austin',
      state: 'TX',
      zip: '78704'
    }
  }
});

Package Sidebar

Install

npm i sails-sequelize-nested

Weekly Downloads

0

Version

0.0.1

License

MIT

Last publish

Collaborators

  • mrded