0.0.3 • Published 9 years ago

sequelize-helpers v0.0.3

Weekly downloads
3
License
ISC
Repository
github
Last release
9 years ago

Sequelize helpers

Set of utilities which simplify some Sequelize tasks such model loading and setting up relations between models.

Install

npm install sequelize-helpers

Usage

var sequelizeHelpers = require('sequelize-helpers')
var Sequelize = require('sequelize')


var sequelize = new Sequelize()

sequelizeHelpers.loadModels(sequelize, __dirname + '/models/*')
sequelizeHelpers.setRelations(sequelize,
  {
    User: {
      hasMany: {
        posts: { model: 'Post', /* ... */ }
      }
    },
    Post: {
      belongsTo: {
        author: { model: 'User', /* ... */  }
      }
    }
  }
)

API

#loadModels(sequelize, path)

Loads models from given paths(s) supporting node-glob patterns. You can also pass array of paths to load from more than one directory. It uses Sequelize.import(...) internally.

paramtypedescription
sequelize{Sequelize}Sequelize instance
path{String|Array}path or array of paths from where to load models (model file structure is described here)

Examples:

sequelizeHelpers.loadModels(sequelize, __dirname + '/models/*')
sequelizeHelpers.loadModels(sequelize,
  [
    __dirname + '/path1/*',
    __dirname + '/path2/*',
    __dirname + '/path3/model1.coffee',
    __dirname + '/path4/model1.js',
    __dirname + '/path5/model1.*'
  ]
)

#setRelations(sequelize, relations)

Sets up relations between models in more handy way than it is done using pure Sequelize. Structure of object describing relations is described here.

paramtypedescription
sequelize{Sequelize}Sequelize instance
relations{Object}relations object (described here)

Examples:

sequelizeHelpers.loadModels(sequelize,{
  Post: {
    hasMany: {
      comments: { model: 'Comment' }
    },
    belongsTo: {
      author: { model: 'User', foreignKey: 'AuthorId' }
    },
    belongsToMany: {
      'tags': { model: 'Tag', through: 'PostTags' }
    }
  }
})

Model files

Model files must look as follows (official Sequelize example from here):

module.exports = function(sequelize, DataTypes) {
  return sequelize.define("Task", {
    name: DataTypes.STRING,
    deadline: DataTypes.DATE,
    importance: DataTypes.INTEGER
  })
}

Relations object

Relations object structure must look as follows:

{
  $model1: {
    $relationType: {
      $as: { model: $model2, /*...*/ }
    }
  }
}
/*
  sequelize.model($model1).$relationType(
    sequelize.model($model2),
    { as: $as, ... }
  )
*/
  • $model1 - name of model1
  • $relationType - type of relation (hasMany|belongsTo|hasOne|belongsToMany)
  • $as - relation alias passed in relation options
  • $model2 - name of model2 (if skipped then $as will be used as model2 name)

If for some reason you don't want to pass/use as param just leave model attribute empty:

{
  Post: {
    hasMany: {
      Comment: {} // skipping `model` attribute
    }
  }
}
/*
  sequelize.model('Post').hasMany(
    sequelize.model('Comment'),
    {}
  )
*/

Of course you can pass any additional relation options:

{
  Post: {
    hasMany: {
      comments: { model: 'Comment', foreignKey: 'PostId' }
    }
  }
}
/*
  sequelize.model('Post').hasMany(
    sequelize.model('Comment'),
    { as: 'comments', foreignKey: 'PostId' }
  )
*/