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