Los modelos son la esencia de Sequelize, estos son una abstracción que representa una tabla dentro de la base de datos a la que nos estamos conectando. Un modelo se encarga de indicarle a Sequelize el nombre de la tabla, las diferentes columnas que tiene esta, así como los tipos de datos que guarda cada una y sus restricciones correspondientes.
El nombre del modelo no tiene que ser estrictamente igual al de la tabla en la base de datos.
Para definir un modelo dentro de Sequelize tenemos dos opciones, ya sea usar el método define
de la clase Sequelize
o usar clases que extiendan de Model
.
sequelize.define
internamente llama a**Model**
, así qué ambas formas son casi lo mismo.
Ambas formas requieren de algo muy importante, tener un schema o modelo que defina la estructura interna de la tabla, así como los tipos de datos de cada columna; para definir los tipos de datos de cada columna usamos los DataTypes
que nos provee Sequelize.
**const { DataTypes } = require("sequelize");
const Schema = {
id: {
allowNull: false,
unique: true,
type: DataTypes.integer,
},
birthDate: {
field: "birth_date",
allowNull: false,
type: DataTypes.date
}
};**
Con lo anterior definimos la estructura de una tabla que va a tener dos columnas, id que es de tipo entero, además de ser único y birth_date que es una fecha que no puede ser nula.
Si no se provee un campo
field
, entonces la columna tomará el nombre de la key/propiedad.
Después de tener nuestro schema listo ya podemos decidir cuál forma usar para crear el modelo.
**const { Model, Sequelize } = require("sequelize");
const sequelize = new Sequelize("your URI string connection", {...config});
//creamos la instancia de Sequelize.
class User extends Model {};
User.init({...yourSchema}, {
modelName: "model_name",
tableName: "table_name",
sequelize,
timestamps: false,
});
// sequelize.sync();**
Lo primero que hacemos es crear una instancia de Sequelize, es la base de todo lo que vamos a hacer, luego definimos la clase que va a servir de molde para nuestro modelo y después iniciamos dicho modelo con el método init
(este se hereda directamente de Model
) y le debemos pasar dos parámetros:
schema
→ la estructura de columnas y tipos de datos que va a tener dicha tabla.config options
→ es un objeto que define la configuración de dicho modelo, las opciones de configuración más comunes son:
modelName
→ el nombre del modelo; si no se provee esta propiedad entonces se tomará el nombre de la clase como el nombre para el modelo.tableName
→ el nombre que queremos que tenga la tabla en la base de datos; si no se provee un valor entonces se tomará el valor de modelName
en plural.sequelize
→ la instancia que creamos de la clase Sequelize
; esta propiedad es obligatoria.timestamps
→ un booleano que define si queremos que Sequelize añada columnas extra que indiquen cuándo fue creada una fila y cuándo fue la última vez que se modificó.Y por último usamos sequelize.sync()
para sincronizar todos los modelos que se hayan inicializado.
Sequelize.define
**const { Sequelize } = require("sequelize");
const sequelize = new Sequelize("your URI string connection", {...config});
//creamos la instancia de Sequelize.
const setUpModels = (sequelize) => {
sequelize.define(
"model_name",
{...yourSchema},
{ tableName: "table_name", timestamps: false }
);
// sequelize.sync();
}
setUpModels(sequelize);**
Lo primero que hacemos es crear una instancia de Sequelize, es la base de todo lo que vamos a hacer, luego creamos una función que nos ayuda a definir todos los diferentes modelos que vayamos a tener, esta recibe la instancia de Sequelize
como parámetro y utiliza el método define
de dicha instancia; define
recibe 3 parámetros:
modelName
→ el nombre que queremos asignarle a dicho modelo.schema
→ la estructura de columnas y tipos de datos que va a tener dicha tabla.config options
→ es un objeto que define la configuración de dicho modelo, las opciones de configuración más comunes son:
tableName
→ el nombre que queremos que tenga la tabla en la base de datos; si no se provee un valor entonces se tomará el valor de modelName
en plural.timestamps
→ un booleano que define si queremos que Sequelize añada columnas extra que indiquen cuándo fue creada una fila y cuándo fue la última vez que se modificó.Lo último que hace la función es llamar a sequelize.sync()
para así sincronizar todos los diferentes modelos que hayamos definido o inicializado.
Después de que hayamos sincronizado nuestros modelos, podemos encontrarlos dentro de el objeto models
que se encuentra en la instancia de Sequelize
.