来自同一模型环回的两个关系不起作用

时间:2016-11-04 07:27:08

标签: node.js mongodb loopbackjs loopback-address

我有两个模型usersappointments

users模型如下所示 -

{
    "users": {
      "0": {
        "id": "1",
        "name": "test1",
        "role": "doctor"
      },
      "1": {
        "id": "2",
        "name": "test2",
        "role": "patient"
      },
      "2": {
        "id": "3",
        "name": "test3",
        "role": "support"
      }
    }
  }

现在在上面的模型中,如果角色是医生,我们将其称为doctor_id,如果是patient,则patient_id等等。

现在我的预约模式低于>

{
    "name": "appointments",
    "plural": "appointments",
    "base": "PersistedModel",
    "idInjection": true,
    "options": {
      "validateUpsert": true
    },
    "properties": {
      "appointmentDate": {
        "type": "date"
      },
      "appointmentTime": {
        "type": "string"
      },
      "doctorId": {
        "type": "string"
      },
      "patientId": {
        "type": "string"
      }
    },
    "validations": [],
    "relations": {
      "Doctor": {
        "type": "belongsTo",
        "model": "users",
        "foreignKey": "doctorId"
      },
      "Patient": {
        "type": "belongsTo",
        "model": "users",
        "foreignKey": "patientId"
      }
    },
    "acls": [],
    "methods": {}
  }

因此,当我尝试GET所有约会时,它不会从users发送关系数据。如果我添加单个关系,它按预期工作,但不能处理来自同一模型的多个关系。

提前致谢,

2 个答案:

答案 0 :(得分:0)

包括我之前的评论以提供背景信息:

我这样做的方式,我相信外键应该是“”两者。你不应该定义doctorId和patientId,你可能必须在用户类中用外键“Doctor”和“Patient”定义两个hasMany关系

这里举一个例子是我的用户类(称为客户)

中定义的关系
"commentsWritten": {
  "type": "hasMany",
  "model": "comment",
  "foreignKey": "sourceCustomerId"
},
"commentsReceived": {
  "type": "hasMany",
  "model": "comment",
  "foreignKey": "targetCustomerId"
},

然后在我的评论定义中,我有以下

"properties": {
  ...
  "targetCustomerId": {
    "type": {
      "required": true
    }
  },
  "sourceCustomerId": {
    "type": {
      "required": true
    }
  }
},    
"relations": {
  "targetCustomer": {
    "type": "belongsTo",
    "model": "customer",
    "foreignKey": ""
  },
  "sourceCustomer": {
    "type": "belongsTo",
    "model": "customer",
    "foreignKey": ""
  }
},

请注意,我确实定义了属性(ids),但是,如果我没记错的话,只有这样才能强迫它们不为空,即你不应该需要它。

答案 1 :(得分:0)

如果您go to the belongsTo documentation可以看到foreignKey字段为空,那么您需要将其从关系定义中删除。

您可能还想定义关系的另一面。

即。 define a hasMany relation users hasMany appointments

{
  "name": "users",
  "base": "PersistedModel",
  ...
  "relations": {
    "doctors": {
      "type": "hasMany",
      "model": "appointments",
      "foreignKey": "doctorId"
    },
    "patients": {
      "type": "hasMany",
      "model": "appointments",
      "foreignKey": "patientId"
    },
  ...
}

然而,可能不支持您尝试做的事情(实际上我甚至不确定它是否对LoopBack有意义)。

你可以check the documentation on polymorphic relations,即使这是一项正在进行的工作,也没有提及Model A hasMany Model B同时通过多个foreignKey

LoopBack需要在第一个外键下搜索一些逻辑,如果没有找到任何内容,则在另一个外键下搜索,我不确定是否支持这种复杂的组合。

建议

为什么不定义两个模型,一个用于医生,一个用于患者,而是有两种不同的关系?你甚至可以go to the documentation on HasManyThrough relations,你可以看到一个模拟与你想要的东西非常相似的例子。