Sequelize hasMany、belongsTo 或两者兼而有之?

2024-02-23

我想与sequ​​elize正确设置一对一或一对多关系,事实上,如果我使用其中之一,一切似乎都工作得很好hasOne/ hasMany or belongsTo在我的模型定义中。 例如,以下关联确实创建了userId他们的目标字段:

    User.hasMany(Email, {
        as: 'emails',
        foreignKey: 'userId',
    })

    User.hasOne(Profile, {
        as: 'profile',
        foreignKey: 'userId',
    })

但在官方文档中几乎到处我都能看到类似的内容:

   Projects.hasMany(Tasks);
   Tasks.belongsTo(Projects);

i.e. hasMany AND belongsTo一起使用。

这真的是必需的还是只使用其中之一就足够了?任何进一步的解释都非常有价值。谢谢!


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sequelize hasMany、belongsTo 或两者兼而有之? 的相关文章

  • 使用 MS Access 获取行的第一个实例

    EDITED 我有这个查询 我想SELECT表中记录的第一个实例petTable SELECT id pet ID FIRST petName First Description FROM petTable GROUP BY pet ID
  • 是否有可能在 postgres 中捕获外键违规

    我正在尝试将数据插入具有外键约束的表中 如果我插入的行中存在约束违规 我想丢弃该数据 问题是每次我违反约束时 postgres 都会返回一个错误 我是否可以在插入语句中添加一些语句 例如 ON FOREIGN KEY CONSTRAINT
  • 将 SQL 数据中的一行映射到 Java 对象

    我有一个 Java 类 其实例字段 以及匹配的 setter 方法 与 SQL 数据库表的列名相匹配 我想优雅地从表中获取一行 到 ResultSet 中 并将其映射到此类的实例 例如 我有一个 Student 类 其中包含实例字段 FNA
  • 使用两个日期之间的随机日期时间更新每一行

    我有一个专栏叫date created我希望每一行保存一个随机日期 日期距当前时间为 2 天 我正在运行以下查询 但它会更新具有相同随机日期的所有行 我希望每一行都是随机的并且不相同 update table set date create
  • 在 Rails 中禁用连接池以使用 PgBouncer

    我们有一个 Ruby on Rails 4 2 8 项目 可以访问大型 PostgreSQL 数据库 我们将使用 PgBouncer 添加一个新的连接池服务器 由于 PgBouncer 将处理数据库连接池 我们是否需要关闭 Rails 自动
  • npm install 命令下载所需包的源位置是什么?

    我试图获取命令 npm install 尝试连接的源位置 URL 并根据 package json 文件获取要下载的依赖包 并将其放置在本地框中 从下面提到的网址 http www tutorialspoint com nodejs nod
  • 如何将可视选择的文本通过管道传输到 UNIX 命令并将输出附加到 Vim 中的当前缓冲区

    使用 Vim 我尝试将在可视模式下选择的文本通过管道传输到 UNIX 命令 并将输出附加到当前文件的末尾 例如 假设我们有一个 SQL 命令 例如 SELECT FROM mytable 我想做如下的事情
  • Mysql 检索所有有限制的行

    我想检索特定用户的所有行 限制为 0 x 所以我只是想问是否有任何方法可以检索 mysql 中的所有行 而不调用返回 x 的 count id 的方法 而不重载现有函数 该函数在查询中根本没有限制 与我们的 string Relace 功能
  • 如何在使用连接池时强制 SqlConnection 物理关闭?

    我明白 如果我实例化一个 SqlConnection 对象 我实际上是从连接池中获取一个连接 当我调用 Open 时 它将打开连接 如果我对该 SqlConnection 对象调用 Close 或 Dispose 方法 它将返回到连接池 但
  • 如何在 Visual Studio 中更改 Azure 数据库表的列顺序

    我整个下午都在寻找在 MS Visual Studio 2022 中重新排序 Azure 数据库表列的方法 没有运气 在其他应用程序中 可以通过拖动或剪切和粘贴轻松重新排列列 这里无能为力 此时 我什至不确定可以在 VS 中移动列 我只对
  • 使用 JSON 参数的 Postgres 批量 INSERT 函数

    这是一个plpgsqlpostgres 的函数9 6 它试图INSERT一行 如果插入没有失败 由于违反键约束 那么它会运行更多命令 CREATE FUNCTION foo int text text RETURNS void AS BEG
  • postgreSql 中特定时间后表更新

    我已经在 postgres 中创建了表 现在我想在特定时间 例如 1 小时 后更新一行 我看到很多问题 例如 https dba stackexchange com questions 56424 column auto updated a
  • 列中差异的数量

    我想检索一列每行中有多少个字母的差异 例如 如果您有一个值 test 而另一行有一个值 testing 则 test 和 testing 之间的差异为 4 个字母 该列的数据值为 4 I have reflected about it an
  • sql server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679
  • 用户登录时的 Postgresql 触发器

    我正在尝试找出一种方法来了解用户何时登录 Postgres 数据库 有没有办法定义用户登录数据库时触发的触发器 或者是否有一个表或系统视图在任何人登录数据库时都会更新 登录钩子 https github com splendiddata l
  • 如何清除NPM的https代理设置?

    如何清除NPM之前的ssl代理设置 好吧 我搜索了很多 但我得到的所有帖子主要是关于如何set公司网络中的代理 我尝试将代理设置为空 npm config set http proxy npm config set https proxy
  • 为 Node.js 客户端应用程序保留 Firebase 用户

    我正在使用 Firebase 构建 Node js 命令行界面 CLI 用于与后端进行身份验证 我想避免让用户每次运行命令时都输入密码 相反 我想实现一个 登录 流程 将凭证保留到文件系统 该凭证可用于后续的无密码身份验证 直到用户 注销
  • 带有 npm 启动脚本的 Nodejs 应用程序

    我对nodejs很陌生 在我的docker化环境中 我想为nodejs应用程序提供appdynamics支持 这要求每个应用程序都要求将以下内容作为其应用程序的第一行 require appdynamics profile controll
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • 如何处理 MongoDB 的断开连接错误

    我在 Node js 进程中看到了这个未捕获的异常 Uncaught exception Error read ETIMEDOUT at TCP onStreamRead internal stream base commons js 16

随机推荐

  • 如何从 android 中的 firebase 检索 List 对象

    我在从 Firebase 检索列表时遇到问题 我存储它没有问题 但是一旦我尝试将 dataSnapshot getValue 转换为 ArrayList 我的应用程序就会崩溃 出现异常 HashMap 无法转换为 ArrayList 但是当
  • Android Studio 1.5.1 上的 AVD Manager 并安装到自定义位置模拟器将无法运行

    I installed Android Studio 1 5 1 see image for build details 安装时我选择了自定义选项 这样我就可以安装特定的路径 我知道我的 SystemDrive 指向一个网络位置 我想安装到
  • 禁用 Chrome 66 中的自动完成功能

    有没有办法禁用 chrome 66 中文本字段的自动完成功能 我尝试过多种选择 例如 自动完成 关闭 自动完成 假 自动完成 已禁用 自动完成 新东西 ETC 谁能帮我这个 另外 如果用户名下面有密码类型字段 chrome 还会自动启用用户
  • 在 JS 中初始化空变量的最佳方法是什么?

    如果我知道该变量稍后将是对象 我使用 var obj 但如果我将其初始化为 null 或 undefined 并不重要 var obj null or var obj undefined 对于我个人使用的字符串 var str 稍后我可以做
  • std::chrono::duration::duration() 如何成为 constexpr?

    默认构造函数std chrono duration定义如下 constexpr duration default 例如 参见cppreference com http en cppreference com w cpp chrono dur
  • 视图和超级视图自动布局的比例高度

    我有一个小视图 我希望他占据超级视图的 1 3 高度 与安全区域大小相同 我用 superview bottom 定义了前导空间 尾随空间 底部空间 其常数 0 AND I want to make the height 1 3 of su
  • 将 ActorRef 传递给其他 Actor 是好是坏?

    我想弄清楚我是否使用传递 AkkaActorRef围绕其他参与者并不是一种反模式 我的系统中有一些演员 有些寿命很长 restClientRouter publisher 有些人在完成工作后就死了 geoActor 短命参与者需要向长命参与
  • 如何从.key和.crt文件获取.pem文件?

    如何从 SSL 证书创建 PEM 文件 这些是我可用的文件 crt server csr server key 您的密钥可能已经是 PEM 格式 但只是以 crt 或 key 命名 如果文件的内容开头为 BEGIN您可以在文本编辑器中阅读它
  • 如何使用 GluonHQ 客户端、Native Image 和 GraalVM 解决已编译的 JavaFX 项目中的 fxml 加载异常?

    这是一个后续问题this https stackoverflow com questions 63419433 how to use graalvm with javafx to compile a native image in mave
  • Angular 2 backgrounImage 中的样式绑定抛出错误

    我正在尝试使用 Angular 2 创建一个应用程序 这是我的模板 div class cover user profile div 我认为 angular2 认为 url 是一个函数并抛出错误 这个问题的解决方案是什么 符号期望expre
  • 如何防止图表中的刻度标签被切断?

    我有问题chartjs http chartjs org其中刻度标签通过以下方式被 切断 1 是否有可以设置的边距 我在 ChartJS 文档中没有看到任何关于此的内容 并且这些似乎包含在 ChartJS Canvas 元素中 意思是 不被
  • 表格视图图像从未发布

    我正在对我的一个应用程序进行重大更新 并尝试减少内存使用量并使其更干净 更快 我正在使用 Instruments 来分析应用程序 并且正在查看 UIImage 分配 当应用程序启动时 我有大约 10 个 尽管其中一个是状态栏图标 不知道为什
  • 不断刷新jquery数据

    我有这个代码 它正在计算某个项目被选择的次数 但是 只有当我在更改选项后刷新页面时 它才可以正常工作和计数 我需要一种方法让它不断刷新或 实时 所以如果它每秒自动刷新 每次页面中发生更改时它都会正确反映 我知道如何进行整页自动刷新 但我不想
  • 将 cookie 传递给 GET 请求(POST 之后)的问题

    我在这个问题上被困了好几天了 由于尝试不同的组合但没有成功 我的眼睛开始受伤 问题是 我正在制作一个应用程序 它必须从互联网获取数据 解析它 然后将其显示给用户 我已经尝试了多种方法来做到这一点 并且使用 JSOUP 非常有帮助 尤其是在解
  • 它是什么以及如何摆脱它

    我注意到 在查看我的页面源代码时 这些字符 shy 紧接着显示 div 标签 我检查了我的编码 但找不到它来自哪里 我做了一些研究 他们说它就在那里 所以可以省去一些话 靠近 h1 标签 我有一个比标题大一点的浮动图像 我想知道这是否是造成
  • SwiftUI:从单元格视图中删除托管对象会使应用程序崩溃[非可选属性]?

    我发布了这个问题 SwiftUI 从单元格视图中删除托管对象会使应用程序崩溃 https stackoverflow com questions 73159270 swiftui deleting managed object from c
  • Asp.Net System.Web.Routing 查找实际的 .aspx 页面

    我正在使用 System Web Routing 来获得一些更好的 URL 但遇到了问题 我需要知道处理请求的实际页面 例如 请求如下 basketball home 我需要找到处理该请求的页面 例如 management default
  • 查找或替换文本区域(选择)

    我无法在 Android Studio 中使用 查找 或 替换 功能来选择文本 结果总是显示在选择中未找到 xxx 我的Android Studio版本是1 2 2 即使今天我将Android Studio更新到最新的1 3 0 它仍然无法
  • 如何移动到下一个大写字母?

    在 vim 中我可以使用f后跟一个字符 以转到当前行中该字符的下一个出现位置 例如 如果我有以下内容 光标位置标记为 m akeBinExprNode undefined 我可以用fB搬到B and dtE删除直到之前E 留给我 make
  • Sequelize hasMany、belongsTo 或两者兼而有之?

    我想与sequ elize正确设置一对一或一对多关系 事实上 如果我使用其中之一 一切似乎都工作得很好hasOne hasMany or belongsTo在我的模型定义中 例如 以下关联确实创建了userId他们的目标字段 User ha