Använda belongsTo
definierar ägandet av de tillhörande modellerna. För att förklara detta mer i detalj kommer jag att hänvisa till exemplet som citeras från handledningarna
Project.hasMany(Task);
Task.belongsTo(Project);
Antag att du inte längre är intresserad av uppgifterna i ett borttaget projekt. I så fall skulle du behöva ta bort uppgifterna manuellt om du inte hade definierat belongsTo
förening. belongsTo
etablerar ett ägande av projekt över sina uppgifter och databasen kommer även automatiskt att ta bort uppgifterna som hör till det borttagna projektet. Detta kallas cascading delete
och kan kedja över flera bord.
Om du kör följande kodavsnitt
const Project = sequelize.define('project', {
name: Sequelize.STRING
});
const Task = sequelize.define('task', {
name: Sequelize.STRING
});
Project.hasMany(Task);
Task.belongsTo(Project);
i ett uppföljningsmanus och titta på resultatet
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 kommer att märka det överlappande beteendet som ställs in i skapandet av uppgiftstabellen.
Så mycket sagt, det slutliga svaret är:det beror på. Användningen av belongsTo
kan vara väldigt praktiskt eller vara ödesdigert om du hellre vill behålla uppgifterna i det raderade projektet. Använd endast belongsTo
om det är vettigt i samband med din ansökan.