sequelize-helpers
v0.0.3
Published
Load sequelize models from directory and easily define model relations
Readme
Sequelize helpers
Set of utilities which simplify some Sequelize tasks such model loading and setting up relations between models.
Install
npm install sequelize-helpersUsage
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' }
)
*/