Utilisation de belongsTo
définit la propriété des modèles associés. Pour expliquer cela plus en détail, je me référerai à l'exemple cité dans les tutoriels
Project.hasMany(Task);
Task.belongsTo(Project);
Supposons que vous n'êtes plus intéressé par les tâches d'un projet supprimé. Dans ce cas, vous auriez à supprimer les tâches manuellement, si vous n'aviez pas défini le belongsTo
association. belongsTo
établit une propriété des projets sur ses tâches et la base de données supprimera également automatiquement les tâches appartenant au projet supprimé. C'est ce qu'on appelle la cascading delete
et peut enchaîner sur plusieurs tables.
Si vous exécutez l'extrait de code suivant
const Project = sequelize.define('project', {
name: Sequelize.STRING
});
const Task = sequelize.define('task', {
name: Sequelize.STRING
});
Project.hasMany(Task);
Task.belongsTo(Project);
dans un script de séquençage et regardez la sortie
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);
vous remarquerez que le comportement en cascade est défini lors de la création du tableau des tâches.
Cela dit, la réponse finale est :ça dépend. L'utilisation de belongsTo
peut s'avérer très utile ou fatal si vous préférez conserver les tâches du projet supprimé. Utilisez uniquement belongsTo
si cela a du sens dans le contexte de votre application.