sequelize-helpers
v0.0.3
Published
Load sequelize models from directory and easily define model relations
Downloads
3
Readme
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.
| param | type | description |-----------|---------------------|------------- | 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.
| param | type | description |-----------|-------------|------------- | 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' }
)
*/