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 { 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