trailpack-sequelize
v2.0.2
Published
Sequelize.js Trailpack http://sequelizejs.com
Downloads
163
Maintainers
Readme
trailpack-sequelize
:package: Sequelize.js Trailpack http://sequelizejs.com
Loads Application Models (in api/models
) into the Sequelize ORM; Integrates with trailpack-router to
generate Footprints for routes.
Usage
Configure
// config/main.js
module.exports = {
// ...
packs: [
require('trailpack-sequelize')
]
}
A basic config/database.js
can be found here : https://github.com/trailsjs/trailpack-sequelize/blob/master/archetype/config/database.js
Models
module.exports = class User extends Model {
//More about supported schema here : http://docs.sequelizejs.com/en/latest/docs/models-definition/
static schema (app, Sequelize) {
return {
name: { type: Sequelize.STRING, allowNull: false },
password: Sequelize.STRING,
displayName: Sequelize.STRING
}
}
static config (app, Sequelize) {
return {
migrate: 'drop', //override default models configurations if needed
store: 'sqlite', //override default models configurations if needed
//More informations about supported models options here : http://docs.sequelizejs.com/en/latest/docs/models-definition/#configuration
options: {
classMethods: {
//If you need associations, put them here
associate: (models) => {
//More information about associations here : http://docs.sequelizejs.com/en/latest/docs/associations/
models.User.hasMany(models.Role, {
as: 'roles',
onDelete: 'CASCADE',
foreignKey: {
allowNull: true
}
})
}
}
}
}
}
}
Query
// api/services/UserService.js
module.exports = class UserService extends Service {
/**
* Finds people with the given email.
* @return Promise
* @example {
* name: 'Ludwig Beethoven',
* email: '[email protected]',
* favoriteColors: [
* { name: 'yellow', hex: 'ffff00' },
* { name: 'black', hex: '000000' }
* ]
* }
*/
findUser (email) {
//More info about queries here : http://docs.sequelizejs.com/en/latest/docs/models-usage/
return this.app.orm.User.find({ where: {email: email} })
}
}
For more informations about sequelize queries, please look at the official documentation
Footprints query options
Some options can be provide as query param for the find
method, example GET /api/v1/user
.
Populate
You can add /api/v1/user?populate=all
to populate all associations or use /api/v1/user?populate=field1,field2
to populate only some association.
Pagination
By settings offset
and limit
you can do some pagination, example /api/v1/user?offset=10&limit=10
will return only 10 items started from 10 (id 10 to 20).
Contributing
We love contributions! Please check out our Contributor's Guide for more information on how our projects are organized and how to get started.