Използване на belongsTo
определя собствеността върху свързаните модели. За да обясня това по-подробно, ще се позова на примера, цитиран от уроците
Project.hasMany(Task);
Task.belongsTo(Project);
Да приемем, че вече не се интересувате от задачите на изтрит проект. В такъв случай ще трябва да изтриете задачите ръчно, ако не сте дефинирали belongsTo
асоциация. belongsTo
установява собственост върху проекти върху своите задачи и базата данни автоматично ще изтрие и задачите, принадлежащи към изтрития проект. Това се нарича cascading delete
и може да върже множество таблици.
Ако изпълните следния кодов фрагмент
const Project = sequelize.define('project', {
name: Sequelize.STRING
});
const Task = sequelize.define('task', {
name: Sequelize.STRING
});
Project.hasMany(Task);
Task.belongsTo(Project);
в скрипт за последователност и гледайте резултата
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);
ще забележите каскадното поведение, зададено при създаването на таблицата със задачи.
Толкова много казано, крайният отговор е:зависи. Използването на belongsTo
може да бъде много полезно или ще бъде фатално, ако предпочитате да запазите задачите на изтрития проект. Използвайте само belongsTo
ако има смисъл в контекста на вашето приложение.