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

来源:互联网 发布:mac电源适配器 编辑:程序博客网 时间:2024/05/16 00:45

译者:飞龙

来源: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。允许重命名关联访问器。
0 0