javascript Sequelize命令db

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript Sequelize命令db相关的知识,希望对你有一定的参考价值。

// Criar Migration
yarn sequelize migration:create --name=NOMEdaMIGRATION

// Edita a migration colocando os campos necessarios e os relacionamentos

// Executar Migrate
yarn sequelize db:migrate

// Cria o arquivo de model
// Importa o model no arquivo index do database
// Cria o Controller
// Importa nas rotas
// Migration de acrescentar coluna em alguma databela ja criada

module.exports = {
  up: (queryInterface, Sequelize) => {
    // Primeiro a tablea que vc quer adcionar a nova coluna no caso abaixo 'users'
    // Segundo qual o nome da coluna 'avatar_id'
    // O tipo no caso abaixo eh so o id por isso integer
    // Depois cria um relacionamento no caso com a tabela Files que contem as imagens dos avatares
    // Ai informa que todo id relacionado na tabela files vai ser igual ao avatar_id da tabela users
    // No caso de delecao de arquivos da tabela files ele seta null na tabela users no onDelete
    // No caso de update da tabela Files ele atualiza na tabela users com o onUpdate
    return queryInterface.addColumn('users', 'avatar_id', {
      type: Sequelize.INTEGER,
      references: { model: 'files', key: 'id' },
      onUpdate: 'CASCADE',
      onDelete: 'SET NULL',
      allowNull: true,
    });
  },

// No caso de reversao da migration ele remove a coluna 'avatar_id' na tabela users
  down: queryInterface => {
    return queryInterface.removeColumn('users', 'avatar_id');
  },
};

// Fim
  // No arquivo de model de usuario ele vai receber um id da tabela de files
  // Referencia que o avatar_id pertence a tabela de files
  // no arquivo de User.model
  static associate(models) {
    this.belongsTo(models.File, { foreignKey: 'avatar_id' });
  }
  
// No arquivo index, de dentro da pasta de database onde se importa os models e as configs do database
// vai verificar se o metodo associate existe e se existir vai chamalo

 .map(model => model.associate && model.associate(this.connection.models));
 
//ex Model:
import Sequelize, { Model } from 'sequelize';
import bcrypt from 'bcryptjs';

class User extends Model {
  static init(sequelize) {
    super.init(
      {
        name: Sequelize.STRING,
        email: Sequelize.STRING,
        password: Sequelize.VIRTUAL,
        password_hash: Sequelize.STRING,
        provider: Sequelize.BOOLEAN,
      },
      {
        sequelize,
      }
    );
    this.addHook('beforeSave', async user => {
      if (user.password) {
        user.password_hash = await bcrypt.hash(user.password, 8);
      }
    });

    return this;
  }

  // Referencia que o avatar_id pertence a tabela de files
  static associate(models) {
    this.belongsTo(models.File, { foreignKey: 'avatar_id' });
  }

  checkPassword(password) {
    return bcrypt.compare(password, this.password_hash);
  }
}

export default User;


//Ex index de database
import { Sequelize } from 'sequelize';

import User from '../app/models/User';
import File from '../app/models/File';

import databaseConfig from '../config/database';

const models = [User, File];

class Database {
  constructor() {
    this.init();
  }

  init() {
    this.connection = new Sequelize(databaseConfig);

    models
      .map(model => model.init(this.connection))
      .map(model => model.associate && model.associate(this.connection.models));
  }
}

export default new Database();

以上是关于javascript Sequelize命令db的主要内容,如果未能解决你的问题,请参考以下文章

passport.deserializeUser 为每个 HTTP 请求执行 DB(续集)命令

防止 Sequelize 将列名用引号括起来

我使用 Sequelize 的 DB 模型不进行迁移

无法通过 Node.js 中的 Sequelize 从 DB 中选择数据

使用 sequelize 包含列的 where 子句

如何通过sequelize在where语句中使用db函数