译者:飞龙

来源:hasOne

hasOne关联是一种多对一的关系,意思是你定义的模型可以有多个实例指向一个其它的实例(所属相同模型或不同模型)。

用法

Animal.hasOne(association_name [, association_model [, options ] ]);

描述

  • association_name是两个模型之间的关系名称‘
  • association_model是要关联的另一个模型(如果没有定义,假设为同一个模型,大多数情况下这可能不是你想要的);
  • options是一个对象,拥有一些和关联有关的,你可以调整的属性,比如自动获取,再比如表(SQL中)或者集合(MongoDB中)的名称。

示例

Animal.hasOne("owner", Person);

在背后,这条语句意思是Animal集合拥有一个属性owner_id(这个名称可以通过选项来修改,{field: 'ownerid'}),它会指向Person集合的某个人。如果关联并不是必须的,则可以为空。

这个关联也会创建一些额外的便利方法(叫做关联访问器)来帮助你管理它。访问器的名称也可以修改(同上,在选项里面),默认情况下,它们会拥有和关联名称相似的名称。例如,下面的代码展示了可以做类似这样的事情:

// assuming John is a Person..
Animal.find({ name: "Deco" }).first(function (err, Deco) {Deco.setOwner(John, function (err) {// John is now the owner of Deco});
});

其它的访问器:

  • getOwner(callback) - 获取关联的所有者
  • hasOwner(callback) - (在回调中)返回这个动物是否拥有所有者
  • removeOwner(callback) - 移除和所有者的关联关系(如果存在的话)

关联反转

有时你希望通过对面的模型来访问关联。在上面的例子中,是通过Person。你可以向关联传递一个选项来实现它。

Animal.hasOne('owner', Person, { reverse: "pets" });

之后,每个person实例都有有两个便利方法:

  • getPets(callback) - 获取所有和这个人有关联的动物
  • setPets(cat, dog, callback) - 移除所有和这个人有关联的动物,并且添加猫和狗

orm2 中文文档 4.1 hasOne(多对一关系)相关推荐

  1. orm2 中文文档 4.3 extendsTo(一对一关系)

    译者:飞龙 来源:extendsTo 你可能想把可选的属性分割到另一个表中.每个扩展都会是一个新的表,其中每一行的唯一标识符是主模型实例的id. 例如: var Person = db.define( ...

  2. orm2 中文文档 4.2 hasMany(多对多关系)

    译者:飞龙 来源:hasMany hasMany 是多对多的关系(包括连接表). 例如:Patient.hasMany('doctors', Doctor, { why: String }, { re ...

  3. orm2 中文文档 4. 定义关联

    译者:飞龙 来源:Defining Associations 关联是一个或多个[模型之间](3. Defining Models.md)的关系. 关联的类型: [hasOne(一对多)](4.1 ha ...

  4. orm2 中文文档 1. 连接到数据库

    译者:飞龙 来源:Connecting to Database 在连接之前,你需要一个受支持的驱动.下面是一些测试过的驱动及其版本,把你所需要的加入到package.json中. 驱动 npm 包 版 ...

  5. orm2 中文文档 8. 聚合

    译者:飞龙 来源:Aggregation 如果你需要从一个模型中获取一些聚合值,你可以使用Model.aggregate().下面通过一个例子来展示: Person.aggregate({ surna ...

  6. orm2 中文文档 5. 同步和删除模型

    译者:飞龙 来源:Syncing and dropping models 同步是一项功能方法,可以在数据库里为你的模型和关联创建所需的表来工作.现存的表并不会被替换,它们只会在不存在的时候被创建. 同 ...

  7. orm2 中文文档 3.3 模型钩子

    译者:飞龙 来源:Model Hooks 如果你想要监听发生在模型实例上的事件,你可以附带一个函数,它会在发生时调用. 现在支持下面这些事件: afterLoad:(无参数)加载和准备所用实例之后: ...

  8. orm2 中文文档 3.2 模型验证器

    译者:飞龙 来源:Model Validations Enforce模块用于验证数据.对于使用以前的验证器的用户,还可以继续使用,它们中的一部分整合到了enforce,剩余部分还没有.推荐你开始使用o ...

  9. orm2 中文文档 3.1 模型属性

    译者:飞龙 来源:Model Properties 模型和一些关联具有一个或多个属性,每个属性有类型以及一些可选设置,你可以自行选择它们(或使用默认设置). 类型 受支持的类型是: text:文本字符 ...

最新文章

  1. 昨天还在 for 循环里写加号拼接字符串的那个同事,今天已经不在了
  2. 购物车清除的php,php-如何清除废弃的woocommerce购物车
  3. 【汇编】汇编学习入门-系列更新20180705
  4. [导入]一再的变故,终于决定何去何从.
  5. wordpress phpmyadmin_西部数码使用指南:虚拟主机WordPress部署SSL注意事项
  6. DC/OS 的安装与部署
  7. 创建一个dynamics 365 CRM online plugin (三) - PostOperation
  8. 使用VS 2019,.NET Core 3和Web API创建ASP.NET Core Blazor CRUD应用程序
  9. 利用python进行数据分析——使用groupby机制对pandas对象类的数据进行聚合与分组操作
  10. 玩转CSS盒子之 三角形盒子
  11. apollo本地启动调方式
  12. spring batch(批处理)
  13. shl归纳推理测试题库_SHL测评:KPMG经典24题,KPMG经典36题
  14. 弱电工程数据中心机房现状定位优化
  15. 八数码问题简单解决办法
  16. 操作系统清华 向勇 陈渝(RISC-V)(2)---操作系统与系统结构和程序设计语言
  17. 常见错误:无效的文件dsn
  18. React使用cra创建项目,开启装饰器
  19. java医院管理系统源码_医院管理信息系统
  20. promise是什么

热门文章

  1. (10)FPGA面试技能提升篇10(MATLAB)
  2. 信息审计服务器功能,审计服务器是什么意思?如何使用Audit和目录审计
  3. STM32F103:二.(3)DHT11温湿度
  4. 5004. boost 源码编译vs2019
  5. STM32编程中枚举和结构体的结合
  6. mysql全拼_Mysql中取得汉字的全拼、拼音首字母
  7. as2.0与php交互,Flash(AS2.0)与php通讯 分享
  8. 计算机二级mysql工具_2020年全国计算机二级MySQL复习知识点:优化工具
  9. MyBatis 阶段总结
  10. 解决maven加载不了oracle jdbc驱动包的问题