Using 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
如果它在您的应用程序上下文中有意义。