Brug af belongsTo
definerer ejerskabet af de tilknyttede modeller. For at forklare dette mere detaljeret vil jeg henvise til eksemplet citeret fra selvstudierne
Project.hasMany(Task);
Task.belongsTo(Project);
Antag, at du ikke længere er interesseret i opgaverne i et slettet projekt. I så fald ville du skulle slette opgaverne manuelt, hvis du ikke havde defineret belongsTo
forening. belongsTo
etablerer et ejerskab af projekter over sine opgaver, og databasen vil automatisk også slette de opgaver, der hører til det slettede projekt. Dette kaldes cascading delete
og kan kæde over flere borde.
Hvis du kører følgende kodestykke
const Project = sequelize.define('project', {
name: Sequelize.STRING
});
const Task = sequelize.define('task', {
name: Sequelize.STRING
});
Project.hasMany(Task);
Task.belongsTo(Project);
i et efterfølgerscript og se outputtet
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);
du vil bemærke, at den overlappende adfærd bliver sat i oprettelsen af opgavetabellen.
Så meget sagt, det endelige svar er:det afhænger. Brugen af belongsTo
kan være meget praktisk eller vil være fatalt, hvis du hellere vil beholde opgaverne i det slettede projekt. Brug kun belongsTo
hvis det giver mening i forbindelse med din ansøgning.