sequelize.js - sequelize 实例中的 set 和 add 方法有什么区别?
问题描述
文档说:
- 添加:将一个或多个目标行与此关联。
- Set:通过传递一组持久化实例或其主键来设置关联的模型。
由于文档没有提供任何示例,我发现它非常混乱。add 是否会将外键添加到关联行,而 Set 会将其的 forreignkey 设置为关联行?
解决方案
让我们看一个1:M的例子:Project 有很多 Tasks。
使用 set “不在传递数组中的所有内容都将取消关联”。这意味着如果您在同一个项目上第二次设置任务,您将替换之前的任务。
而使用 add,您不必担心旧任务被替换;将添加新旧任务
project.setTasks([task1, task2]).then(() => {
// saved!
})
// remove the association with task1
project.setTasks([task2]).then(associatedTasks => {
// you will get task2 only
})
作为副作用,将一个空数组传递给 set 将删除所有任务
// remove 'em all
project.setTasks([]).then(associatedTasks => {
// you will get an empty array
})
// or remove 'em more directly
project.removeTask(task1).then(() => {
// it's gone
})
http://docs.sequelizejs.com/manual/tutorial/associations.html#associating-objects
推荐阅读
- yarnpkg - 为什么 yarn 一直试图加载我卸载的包?
- django - 为 AWS ECS Docker 部署安排每周 Django 命令
- java - 如何在 Spring Boot 中使用 Fongo (Fake mongo) 进行集成测试
- rust - 读取线后借来的价值不够长
- javascript - NodeJS + Express 不会加载公共目录,现在显示起始文件的 js
- azure - 更改逻辑应用的位置(区域)?还是功能应用?应用服务计划和存储帐户?
- c++ - 如何在概念中使用 C++ requires 子句来要求成员变量满足概念约束?
- python - 在 MacOS 上使用 python 到 Accelerometer 的 I2C 接口
- ubuntu - 未通过代理连接时 Ubuntu VM 中的 DNS 解析问题
- php - DataTables 警告,请求第 0 行第 0 列的未知参数“ID”