sql >> Databáze >  >> RDS >> PostgreSQL

Sequelize hasMany, PatriTo, nebo obojí?

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.




  1. Testování PHPUnit se nezdaří POUZE při návštěvě kořenové stránky ( visit('/') ) v Laravel 5

  2. Před nahráním zobrazte vybraný soubor v html vstupu

  3. Nechápu, proč mi nefunguje SQL

  4. Dosažení limitu parametru 2100 (SQL Server) při použití Contains()