martes, 26 de enero de 2021

Modelos en Sequelize

Modelos en Sequelize

Un modelo es una abstracción que representa una tabla en la base de datos, nos dice el nombre de la tabla en la base de datos y las columnas que tiene y sus tipos de datos, el nombre del modelo no tiene porque coincidir con el nombre de la tabla en la base de datos, generalmente estas se ponen en singular y los nombres de las tablas en plural.

 

Definicion de un Modelo

Los modelos se pueden definir de dos formas equivalentes en Sequelize:

  •     Mediante sequelize.define
  •     Creando una clase derivada de Model y llamando a init


Mediante sequelize.define

Vamos a crear un modelo para representar usuarios, que tienen un nombre y un apellido. Queremos que nuestro modelo se llame Usuario y la tabla que representa se llame Usuarios en la base de datos.

 
var { Sequelize, Model, DataTypes } = require('sequelize');
var main = function () {
var sequelize = new Sequelize('mysql://javier:javier@localhost:3306/appORMUserProyect',
{
pool : {
  max: 90,
  min: 0,
  acquire: 30000,
  idle: 10000
}
}
);
sequelize
   .authenticate()
   .then(() => {
     console.log('Connection has been established successfully.');
   })
   .catch(err => {
     console.error('Unable to connect to the database:', err);
   });
   var Usuario = sequelize.define('Usuario', {
    // Model attributes are defined here
    nombre: {
      type: DataTypes.STRING,
      allowNull: false
    },
    primerApellido: {
      type: DataTypes.STRING
      // allowNull defaults to true
    }
  }, {
    sequelize, timestamps: false
  });
  sequelize.sync();
}();


Creando una clase derivada de model

var { Model } = require('sequelize');
module.exports = (sequelize, DataTypes) => {
    class Usuario extends Model { }
    Usuario.init({
        dni: {
            type: DataTypes.STRING,
            primaryKey : true
        },
        nombre: {
            type: DataTypes.STRING,
            allowNull: false
        },
    },        
        {
            sequelize,
            timestamps: false,
            modelName: 'Usuario'
        }
    );
    return Usuario;
}


Sincronizar un Modelo

 Usuario.sync({ force: true }).then(() => {
  return Usuario.create({
    dni: '001',
    nombre: 'Juan'
              });
            }); 

Sincronizar todos los modelos

En lugar de llamar a sync () para cada modelo, puede llamar a sequelize.sync () que sincronizará automáticamente todos los modelos.

sequelize.sync();

Modelo Paranoid

Sequelize apoya el concepto de tablas paranoicas. Una tabla paranoica es aquella que, cuando se le dice que elimine un registro, no se va a eliminar realmente, solo se va eliminar en sequielize pero no en la base de datos.

Va a tener una columna especial llamada deletedAt que tiene la fecha y la hora de esa solitud de eliminacion.

Definición de un modelo como paranoid

Para hacer que un modelo sea paranoico, se debe de poner la opción paranoid: true a la definición del modelo. Paranoid necesita la opcion timestamps a true para funcionar

Podemos cambiar el nombre preterminado de la columna deletedAt por otro nombre

var { Model } = require('sequelize');
var { Sequelize, Model, DataTypes, Op, UniqueConstraintError } = require('sequelize');
module.exports = (sequelize, DataTypes) => {
    class Usuario extends Model { }
    Usuario.init({
       dni: {
            type: DataTypes.STRING,
            primaryKey : true
        },
        nombre: {
            type: DataTypes.STRING,
        }
    },
        {
            sequelize,
            timestamps: true,
            paranoid: true,
            deletedAt: 'destroyTime', //Cambio de nombre a esta  columna
            modelName: 'usuario'
        }
    );
    return Usuario;
}

 

Si queremos una eliminacion dura en nuestro modelo, entonces vamos a usar la opcion  force: true

Usuario.destroy(
    {
        where: {
            dni: '001',
        },
        force : true
    })
    .then(function (success) {
        console.log(success);
        if (success==0){ //Si no encuentra ningun registro
           console.log('El usuario no existe en la base de datos')
        }else{
            console.log('Usuario borrado correctamente');
        }  
    }).catch(function (err) {
        console.log(err + ': Error de borrado de Usuario');
    })

No hay comentarios:

Publicar un comentario