No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Modificando una entidad

15/27
Recursos

Aportes 11

Preguntas 13

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Para generar el archivo add-role.js hay que correr el comando

npm run migrations:generate add-role

Con sequelize.sync() no se puede alterar una tabla que ya está creada ya que únicamente lee el modelo, y en caso de hacer alguna modificación, se queda con la primera versión (no se puede agregar un atributo más). Con las migraciones es más flexible ya que sí se pueden hacer modificaciones y tener todo de una forma organizada.

Para agregar una columna se hace con el método addColumn, se define el nombre de la tabla, seguido del nombre de la columna, finalmente el esquema (nulo, string, etc), en ese caso se define el esquema del campo en específico.

await queryInterface.addColumn(USER_TABLE, 'role', UserSchema.

Para quitar la columna se usa el método removeColumn definiendo el nombre de la tabla y de la columna.

await queryInterface.removeColumn(USER_TABLE, 'role');

Se debe correr la migración para ejecutar los cambios, esta va a correr a partir de la última migración.

Éxito rotundo

💾 DB Generation

ℹ️ Repositorio: Link
.

user.js. Definición de esquema

import { DataTypes, Sequelize as SequelizeClient } from 'sequelize';

/**
 * @description description of each field in the table
 * @typedef {Object} field definition
 * @property {boolean} allowNull - false=NOT NULL
 * @property {boolean} autoIncrement - each insert, increase the counter
 * @property {boolean} primaryKey - define is primary key
 * @property {boolean} type - expresion to match SQL type
 * @property {boolean} unique - difne as unique the field
 * @property {boolean} field - rename the field
 */
export default {
    id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: DataTypes.INTEGER,
    },
    email: {
        allowNull: false,
        type: DataTypes.STRING,
        unique: true,
    },
    password: {
        allowNull: false,
        type: DataTypes.STRING,
    },
    createdAt: {
        allowNull: false,
        type: DataTypes.DATE,
        field: 'created_at',
        defaultValue: SequelizeClient.NOW,
    },
    updatedAt: {
        allowNull: false,
        type: DataTypes.DATE,
        field: 'updated_at',
        defaultValue: SequelizeClient.NOW,
    },
};

.

config.js. Configuración de entornos

import Sequelize from './../libs/sequelize';

module.exports = Sequelize.migration;

.

♻️ .sequelizerc Configuración del sequelize

require('@babel/register');

module.exports = {
    config: './src/mocks/config.js',
    'migrations-path': './src/mocks/migrations',
    'seeders-path': './src/mocks/seeders',
};

♻️ package.json. Adición de scrips de generación y ejecución

        "seeds:generate": "sequelize-cli seed:generate --name",
        "seeds:run": "sequelize-cli db:seed:all",
        "migrations:generate": "sequelize-cli migration:generate --name",
        "migrations:run": "sequelize-cli db:migrate",
        "db:generate": "npm run migrations:run && npm run seeds:run",

.

Generación de scripts para migration y seeds

create-user-table.js

import userSchema from '../models/user';

module.exports = {
    up: async (queryInterface) => {
        await queryInterface.createTable('users', userSchema);
    },

    down: async (queryInterface) => {
        await queryInterface.drop('users');
    },
};

users.js

.
💡Para la generación de Seeds, puede ocupar un generador de mocks como Mockaroo

module.exports = {
    up: (queryInterface) => {
        return queryInterface.bulkInsert('users', [
            {
                email: '[email protected]',
                password: 'dIkttoW58AZl',
                created_at: new Date(),
                updated_at: new Date(),
            },
            {
                email: '[email protected]',
                password: 'LWGHo4Sf',
                created_at: new Date(),
                updated_at: new Date(),
            },
            {
                email: '[email protected]',
                password: '8iKZ14bBA',
                created_at: new Date(),
                updated_at: new Date(),
            },
            {
                email: '[email protected]',
                password: 'GLY4O1',
                created_at: new Date(),
                updated_at: new Date(),
            },
            {
                email: '[email protected]',
                password: 'dWYttZ4',
                created_at: new Date(),
                updated_at: new Date(),
            },
        ]);
    },
    down: (queryInterface) => {
        return queryInterface.bulkDelete('users', null, {});
    },
};

Hay un salto de edición, no se ve el proceso para crear la nueva migración add-role para crearlo tenemos que hacer uso de nuestro script :

npm run migrations:generate add-role

Una cosa importante es que cuando corremos una migración, queda un registro de esa migración en base de datos de dicha migración. Por ejemplo, recientemente corrimos el comando de creación de la tabla users, entonces en la base de datos se creará una carpeta llamada SequelizeMeta, en donde quedará un registro de que se corrió dicha migración.
Por lo que si corremos ahora esta última migración de agregar una columna, Sequelize consultará en base de datos en el registro de migraciones cual fue la última migración que hizo en dicha carpeta, por lo que no volverá a correr una migración que ya quedo registrada, sino de todas de las que no tiene registro en base de datos. Es decir, una vez que corremos una migración, debemos crear otra migración si queremos realizar alguna otra operación, exceptuando que no sea ir para atrás de la última migración que hicimos

Excelente clase muy buena info.

ahora si todo bien funciono aunque tuve que corregir algunos temas pero funcion… 😄

[
  {
    "id": 1,
    "email": "[email protected]",
    "password": "12345678",
    "role": "customer",
    "createdAt": "2021-11-25T11:03:34.941Z"
  },
  {
    "id": 2,
    "email": "[email protected]",
    "password": "12345678",
    "role": "customer",
    "createdAt": "2021-11-25T11:03:48.567Z"
  }
]

npm run migrations:generate add-role

Muy bien ya me quedo

excelente curso, hecho en pequeñas capsulas para ir directamente al video, justo necesitaba este video para aplicarlo en mis proyectos