Cursos / Informática para Internet / Desenvolvimento Backend / Aula
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.
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;
};
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
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