开发者社区> apachecn_飞龙> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 译者:飞龙 来源:hasMany hasMany 是多对多的关系(包括连接表)。 例如:Patient.hasMany('doctors', Doctor, { why: String }, { reverse: 'patients', key: true })。
+关注继续查看

译者:飞龙

来源:hasMany

hasMany

是多对多的关系(包括连接表)。

例如:Patient.hasMany('doctors', Doctor, { why: String }, { reverse: 'patients', key: true })

病人可以拥有许多不同的医生。每个医生可以拥有许多不同的病人。

当你调用Patient.sync()时,会创建一个连接表patient_doctors

列名称 类型
patient_id Integer
doctor_id Integer
why varchar(255)

下列函数是可用的:

// 获取所有关联医生的列表
patient.getDoctors(function(err, doctors) {
  // ...
});

// 向连接表中增加记录
patient.addDoctors([phil, bob], function(err) {
  // ...
});

// 移除连接表中的现有记录,并增加新的
patient.setDoctors([phil, nephewOfBob], function(err) {
  // ...
});

// 检查是否某个病人关联了指定的医生
patient.hasDoctors([bob], function(err, patientHasBobAsADoctor) {
  // because that is a totally legit and descriptive variable name
  if (patientHasBobAsADoctor) {
    // ...
  } else {
    // ...
  }
});

// 从连接表中移除指定记录
patient.removeDoctors([bob], function(err) {
  // ...
});

// 并且所有医生都有自己的方法来获取病人
bob.getPatients(function(err, patients) {
  if (patients.indexOf(you) !== -1) {
    // woot!
  } else {
    // ...
  }
});

// 以及其他

要把医生关联到病人:

patient.addDoctor(surgeon, {why: 'remove appendix'}, function(err) {
  // ...
});

// or...
surgeon.addPatient(patient, {why: 'remove appendix'}, function(err) {
  // ...
});

这样会添加{patient_id: 4, doctor_id: 6, why: "remove appendix"}到连接表中。

API

Model.hasMany(
  name,       // String. 关联名称
  otherModel, // Model. 要关联的模型
  extraProps, // Object. 在连接表上出现的额外属性
  opts        // Object. 关联的选项
);

选项

选项名称 类型 描述
autoFetch Boolean 默认为false。如果为true,关联将会自动被获取。
autoFetchLimit Number 默认为1。自动获取的深度。
key Boolean 默认为false(由于历史原因)。如果为true,表中外键的列会形成一个组合键。
mergeTable String 连接表的自定义名称
mergeId String 代表当前模型那一列的自定义名称
mergeAssocId String 代表另一个模型那一列的自定义名称
reverse String 默认为false。如果为true,关联可以通过另一个模型使用指定方法获取到。
getAccessor String 默认为'get' + Name。允许重命名关联访问器。
setAccessor String 默认为'set' + Name。允许重命名关联访问器。
hasAccessor String 默认为'has' + Name。允许重命名关联访问器。
delAccessor String 默认为'del' + Name。允许重命名关联访问器。
addAccessor String 默认为'add' + Name。允许重命名关联访问器。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
orm2 中文文档 7. 创建和更新记录
译者:飞龙 来源:Creating and Updating Items 创建 var newRecord = {}; newRecord.
669 0
orm2 中文文档 8. 聚合
译者:飞龙 来源:Aggregation 如果你需要从一个模型中获取一些聚合值,你可以使用Model.aggregate()。
591 0
orm2 中文文档 4.3 extendsTo(一对一关系)
译者:飞龙 来源:extendsTo 你可能想把可选的属性分割到另一个表中。每个扩展都会是一个新的表,其中每一行的唯一标识符是主模型实例的id。
623 0
+关注
apachecn_飞龙
Github:@wizardforcel 简书:@ApacheCN_飞龙 微博:@龙雀 CSDN:@wizardforcel ApacheCN 官网:apachecn.org 机器学习交流群:629470233
719
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载