Usando
belongsTo
define a propriedade dos modelos associados. Para explicar isso com mais detalhes, vou me referir ao exemplo citado nos tutoriais Project.hasMany(Task);
Task.belongsTo(Project);
Suponha que você não esteja mais interessado nas tarefas de um projeto excluído. Nesse caso, você teria que excluir as tarefas manualmente, se não tivesse definido o
belongsTo
Associação. belongsTo
estabelece uma propriedade de projetos sobre suas tarefas e o banco de dados também excluirá automaticamente as tarefas pertencentes ao projeto excluído. Isso é chamado de cascading delete
e pode encadear em várias tabelas. Se você executar o seguinte trecho de código
const Project = sequelize.define('project', {
name: Sequelize.STRING
});
const Task = sequelize.define('task', {
name: Sequelize.STRING
});
Project.hasMany(Task);
Task.belongsTo(Project);
em um script de sequela e observe a saída
Executing (default): DROP TABLE IF EXISTS `projects`;
Executing (default): CREATE TABLE IF NOT EXISTS `projects` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL);
Executing (default): PRAGMA INDEX_LIST(`projects`)
Executing (default): DROP TABLE IF EXISTS `tasks`;
Executing (default): CREATE TABLE IF NOT EXISTS `tasks` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `projectId` INTEGER REFERENCES `projects` (`id`) ON DELETE SET NULL ON UPDATE CASCADE);
você notará o comportamento em cascata sendo definido na criação da tabela de tarefas.
Tanto dito, a resposta final é:depende. O uso de
belongsTo
pode ser muito útil ou será fatal se você preferir manter as tarefas do projeto excluído. Use apenas belongsTo
se fizer sentido no contexto da sua aplicação.