Методы экземпляра - это распространенный способ добавить функциональности вашим моделям Sequelize.js. Их можно определить двумя способами.
Допустим, у вас есть модель Todo:
var Todo = sequelize.define('Todo', { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, allowNull: false, primaryKey: true, }, title: DataTypes.STRING, complete: { type: DataTypes.BOOLEAN, defaultValue: false, } }, { classMethods: { associate: function(models) { Todo.belongsTo(models.User); } } }); return Todo;
Мы определим метод sayTitle
instance, который заставит экземпляр Todo записывать свой заголовок в консоль. Как я уже сказал, это можно сделать двумя способами.
Номер 1
'use strict'; module.exports = function(sequelize, DataTypes) { var Todo = sequelize.define('Todo', { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, allowNull: false, primaryKey: true, }, title: DataTypes.STRING, complete: { type: DataTypes.BOOLEAN, defaultValue: false, } }, { classMethods: { associate: function(models) { Todo.belongsTo(models.User); } }, instanceMethods: { sayTitle: function() { console.log(this.title) } } }); return Todo; };
Номер 2
'use strict'; module.exports = function(sequelize, DataTypes) { var Todo = sequelize.define('Todo', { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, allowNull: false, primaryKey: true, }, title: DataTypes.STRING, complete: { type: DataTypes.BOOLEAN, defaultValue: false, } }, { classMethods: { associate: function(models) { Todo.belongsTo(models.User); } } }); Todo.Instance.prototype.sayTitle = function () { console.log(this.title); } return Todo; };
в обоих случаях this
, к которому у вас есть доступ из метода экземпляра, является `instance`, поэтому, например,
Todo.create({title: "do all the things}) .then(function(todo){ todo.sayTitle(); }) // => "do all the things"
запишет на консоль «все дела». Лично я предпочитаю метод номер 2 для определения методов экземпляра, поскольку он более читабелен, когда вы имеете дело с большим количеством методов экземпляра.