0.0.3 • Published 10 years ago

sequelize-helpers v0.0.3

Weekly downloads
3
License
ISC
Repository
github
Last release
10 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' }
  )
*/