2

I have experience in writing statics functions in moongose like

    var mongoose =require('mongoose');
var Schema = mongoose.Schema;
var adminSchema = new Schema({
    fullname : String,
    number : Number,
    email: String,
    auth : {
        username: String,
        password : String,
        salt: String
    }

});


adminSchema.statics.usernameInUse = function (username, callback) {
    this.findOne({ 'auth.username' : username }, function (err, doc) {
        if (err) callback(err);
        else if (doc) callback(null, true);
        else callback(null, false);
    });
};

here usernameInUse is the function I wana write but using sequelize for mysql database

my model

 /*
  This module is attendant_user table model.
  It will store attendants accounts details.
*/

"use strict";

module.exports = function(sequelize, DataTypes) {
  var AttendantUser = sequelize.define('AttendantUser', {

    username : {
      type : DataTypes.STRING,
      allowNull : false,
      validate : {
        isAlpha : true
      }
    },{
    freezeTableName : true,
    paranoid : true
  });

  return AttendantUser;
};

How to add statics function here..??

2 Answers 2

5

Well, you can easily use Expansion of models

var User = sequelize.define('user', { firstname: Sequelize.STRING });

// Adding a class level method
User.classLevelMethod = function() {
  return 'foo';
};

// Adding an instance level method
User.prototype.instanceLevelMethod = function() {
  return 'bar';
};

OR in some cases you may use getter and setter on your models. See the docs:

A) Defining as part of a property:

var Employee = sequelize.define('employee', {
  name:  {
    type     : Sequelize.STRING,
    allowNull: false,
    get      : function()  {
      var title = this.getDataValue('title');
      // 'this' allows you to access attributes of the instance
      return this.getDataValue('name') + ' (' + title + ')';
    },
  },
  title: {
    type     : Sequelize.STRING,
    allowNull: false,
    set      : function(val) {
      this.setDataValue('title', val.toUpperCase());
    }
  }
});

Employee
  .create({ name: 'John Doe', title: 'senior engineer' })
  .then(function(employee) {
    console.log(employee.get('name')); // John Doe (SENIOR ENGINEER)
    console.log(employee.get('title')); // SENIOR ENGINEER
  })

B) Defining as part of the model:

var Foo = sequelize.define('foo', {
  firstname: Sequelize.STRING,
  lastname: Sequelize.STRING
}, {
  getterMethods   : {
    fullName       : function()  { return this.firstname + ' ' + this.lastname }
  },

  setterMethods   : {
    fullName       : function(value) {
        var names = value.split(' ');

        this.setDataValue('firstname', names.slice(0, -1).join(' '));
        this.setDataValue('lastname', names.slice(-1).join(' '));
    },
  }
});

Hope it helps.

Sign up to request clarification or add additional context in comments.

Comments

1
AttendantUser.usernameInUse = function (username, callback) {
   ...
};
return AttendantUser;

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.