Pomocí belongsTo
definuje vlastnictví souvisejících modelů. Abych to vysvětlil podrobněji, budu odkazovat na příklad citovaný z tutoriálů
Project.hasMany(Task);
Task.belongsTo(Project);
Předpokládejme, že již nemáte zájem o úkoly smazaného projektu. V takovém případě byste museli úkoly smazat ručně, pokud byste nedefinovali belongsTo
sdružení. belongsTo
založí vlastnictví projektů nad svými úkoly a databáze automaticky smaže i úkoly patřící ke smazanému projektu. Toto se nazývá cascading delete
a může řetězit více tabulek.
Pokud spustíte následující fragment kódu
const Project = sequelize.define('project', {
name: Sequelize.STRING
});
const Task = sequelize.define('task', {
name: Sequelize.STRING
});
Project.hasMany(Task);
Task.belongsTo(Project);
v sequelizačním skriptu a sledujte výstup
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);
při vytváření tabulky úkolů si všimnete kaskádového chování.
Tolik řečeno, konečná odpověď zní:záleží. Použití belongsTo
může přijít velmi vhod nebo bude fatální, pokud si raději ponechat úkoly smazaného projektu. Používejte pouze belongsTo
pokud to dává smysl v kontextu vaší aplikace.