您的位置:首页 > 其它

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

2016-01-10 16:38 197 查看
译者:飞龙

来源:hasMany

hasMany

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

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


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

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


列名称类型
patient_idInteger
doctor_idInteger
whyvarchar(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. 关联的选项
);


选项

选项名称类型描述
autoFetchBoolean默认为
false
。如果为
true
,关联将会自动被获取。
autoFetchLimitNumber默认为
1
。自动获取的深度。
keyBoolean默认为
false
(由于历史原因)。如果为
true
,表中外键的列会形成一个组合键。
mergeTableString连接表的自定义名称
mergeIdString代表当前模型那一列的自定义名称
mergeAssocIdString代表另一个模型那一列的自定义名称
reverseString默认为
false
。如果为
true
,关联可以通过另一个模型使用指定方法获取到。
getAccessorString默认为
'get' + Name
。允许重命名关联访问器。
setAccessorString默认为
'set' + Name
。允许重命名关联访问器。
hasAccessorString默认为
'has' + Name
。允许重命名关联访问器。
delAccessorString默认为
'del' + Name
。允许重命名关联访问器。
addAccessorString默认为
'add' + Name
。允许重命名关联访问器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: