我想通过sequelize正确设置一对一或一对多关系,事实上,如果我在模型定义中使用hasOne
/hasMany
或之一,那么一切似乎都很好belongsTo
。例如,以下关联确实userId
在其目标上创建了字段:
User.hasMany(Email, {
as: 'emails',
foreignKey: 'userId',
})
User.hasOne(Profile, {
as: 'profile',
foreignKey: 'userId',
})
但是在官方文档中几乎到处我都看到类似的东西:
Projects.hasMany(Tasks);
Tasks.belongsTo(Projects);
即hasMany
ANDbelongsTo
一起使用。
这真的是必需的,还是仅使用其中之一就足够了?任何进一步的解释都是非常有价值的。谢谢!
使用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
在您的应用程序上下文中有意义时才使用。
那么,我应该只使用Antisamy或CSP,还是两者都使用都是有益的? 提前谢谢你。
我想知道存储一些全局变量是否是一个好的做法,例如:THREAD_PER_CORE(确定我的线程池中应该有多少个线程)WAIT_DELETE_MESSAGE(确定消息应该持续多长时间) 在.properties文件中。 或者我应该使用一个将这些定义为全局公共静态变量的类 或者我应该同时执行这两个操作,然后读取这些属性文件,将它们作为公共静态变量存储在该类中 或者我应该把所有的东西都设置为环境变量..
我在想像这样的东西: 内容类型:text/html;Charset=<某些编码>
这是我第一次使用IdentityServer4和AspNetIdentity设置OpenID Connect,我希望有人能揭开关于存储用户数据的神秘面纱。 到目前为止,我读到的是,用户数据应该存储在连接到Auth服务器的Auth db中,但我真的希望将用户数据存储在连接到资源服务器的资源db中。 我目前有一个如下所示的数据模型: 还有人说,与Auth无关的数据,如用户的城市或国家,不应该存储在Au
BelongsTo relations 隶属关系 简介 定义 belongsTo 关系 方法加入到模型 简介 一个 Model 设置 belongsTo relation(隶属关系) 时同时,另一个 model 相应的设置了 一对一 或者 一对多的关系 在一个多到一的关系每个声明 "belongs to"的实例,都必定有它隶属的 其他 Model 实例对象(目标对象). 而对象目标可以有多种关系模
HasMany relations (一对多的关系) 简介 定义 HasMany 关系 添加方法到 HasMany 的模型 定义 hasMany 关系建立一个一对多的连接到其他 Model, 经常 其他模型还会设置 belongsto 关联到 这个模型。 这个关系(hasMany) 表示每个实例,都关联着 0 个或者多个其他 model 例如,在与客户定单的应用程序,客户可以有许多订单,如下图所示