orm2 中文文档 4.2 hasMany(多对多关系)
2016-01-10 16:38
197 查看
译者:飞龙
来源:hasMany
例如:
病人可以拥有许多不同的医生。每个医生可以拥有许多不同的病人。
当你调用
下列函数是可用的:
要把医生关联到病人:
这样会添加
来源: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。允许重命名关联访问器。 |
相关文章推荐
- ORACLE--EXISTS
- html标签meta的用法
- LNMP架构搭建(Linux+Nginx+MySQL+PHP)
- 烤氏历史第8集:《世通兴衰录:被遗忘的帝国》-3.帝国盛世
- JavaMail学习四 JavaMailAPI
- RSQLite 操作sqlite数据库
- iOS中16进制转10进制
- 烤氏历史第7集:《世通兴衰录:被遗忘的帝国》-2.前朝宫阙
- 修改文件扩展名和文件
- didMoveToSuperView 引发的思考
- 烤氏历史第6集:《世通兴衰录:被遗忘的帝国》-1.时代在变
- Android中使用shape来定义控件
- 烤氏历史第5集:小灵通漫游神州记-从贝尔实验室到非典机遇
- Eclipse常用设置
- mini2440使用nfs挂载的另一种方法
- 原型模式(一)
- 在Visual Studio上开发ARM嵌入式软件
- [数论] 组合数取模 中国剩余定理 Lucas定理
- Nginx编译安装时常见错误分析
- LeetCode-48-Rotate Image(模拟)-Medium