Cursos / Informática para Internet / Desenvolvimento Backend / Aula

arrow_back Aula 07 - Banco de dados relacional (parte 2)

Adicionando relacionamento


Na aplicação existem dois modelos e, para melhor funcionamento, é necessário estabelecer uma relação entre eles. Existem diversos tipos de relação e deve-se escolher o que mais for adequado para a situação. Para saber mais, acesse o site do Sequelize.

Para esse caso, o tipo de relação usada será a One-To-One.

Estabelecendo a relação

Para relacionar a tabela de post com a de usuários, é necessário implementar a função estática associate, no arquivo post.js, na pasta models. Ademais, é preciso fazer modificações na inicialização do modelo, adicionando uma chave. Após acompanhar o vídeo, seu código deverá estar assim:


    'use strict';
    const {
        Model, INTEGER
    } = require('sequelize');
    module.exports = (sequelize, DataTypes) => {
        class Post extends Model {
            /**
             * Helper method for defining associations.
             * This method is not a part of Sequelize lifecycle.
             * The `models/index` file will call this method automatically.
             */
            static associate(models) {
                Post.belongsTo(models.Usuario, {foreignKey: 'userId'})
            }

        };
        Post.init({
            titulo: DataTypes.STRING,
            texto: DataTypes.STRING,
            userId: DataTypes.INTEGER
        }, {
            sequelize,
            modelName: 'Post',
        });
        return Post;
    };

Realizando a migração

Após a implementação de post.js, o campo já estará registrado. No entanto, ainda não estará cadastrado no banco, tendo em vista que, quando criado, o modelo não possuía esse novo campo. Para adicionar, é necessário fazer uma migração. No terminal rode o seguinte comando:

    npx sequelize-cli migration:generate --name add-post-belongs-user

Esse comando irá gerar um arquivo de migração que precisa ser implementado e ao final deve ficar conforme o modelo abaixo:

    'use strict';

    module.exports = {
        up: async (queryInterface, Sequelize) => {
            return queryInterface.addColumn('Posts', 'userId', {
                type: Sequelize.INTEGER,
                references: {
                    model: 'Usuarios',
                    key: 'id'
                },
                onDelete: 'SET NULL'
            })
        },

        down: async (queryInterface, Sequelize) => {
            return queryInterface.removeColumn('Posts', 'userId')
        }
    };

Para testar se está tudo funcionando, é preciso executar todas as migrações. Então, no terminal, digite o seguinte comando:

npx sequelize-cli db:migrate

Atualizando a validação

Agora, para salvar um post, deve ser passado também o usuário autor daquele post. Para fazer isso, é necessário implementar o arquivo post.schema.js.

Ao final das modificações, o arquivo deve ficar conforme o modelo abaixo:

    module.exports = {
            type: "object",
            properties: {
                    titulo: {type: "string", maxLength: 100, minLength: 5},
                    texto: {type: "string"},
                    userId: {type: "integer"}
            },
            required: ["titulo", "texto", "userId"],
            additionalProperties: false
    }

Versão 5.3 - Todos os Direitos reservados