Loopback API包括过滤器未按预期工作

时间:2015-08-27 14:59:11

标签: node.js api express loopbackjs strongloop

我使用不同的模型来简化我想要实现的目标并消除混乱,尽管理论应该与我的实际项目相同。

使用以下假设:系统只能有一种类型的扬声器和一种类型的放大器。

说我有以下型号:

*** System ***
- id
- name
- speakerId
- ampId

*** Speaker ***
- id
- name

*** Amp ***
- id
- name

我已将以下内容添加到我的System.json模型文件中(我认为是正确的):

"relations": {
    "speakers": {
      "type": "hasOne",
      "model": "Speaker",
      "foreignKey": "speakerId"
    },
    "amps": {
      "type": "hasOne",
      "model": "Amp",
      "foreignKey": "ampId"
    }
  },

当我启动应用程序并打开API资源管理器并创建一个新的Speaker或Amp实例时,它需要以下内容:

  *** Speaker ***
- id
- name
- speakerId   *** Why is this here??? ***

如果我将System.json模型文件更改为这样(我认为这是错误的方法):

"relations": {
    "speakers": {
      "type": "hasOne",
      "model": "Speaker",
      "foreignKey": "id"
    },
    "amps": {
      "type": "hasOne",
      "model": "Amp",
      "foreignKey": "id"
    }
  },

API资源管理器中的所有内容都是正确的。所以我添加一些扬声器和放大器,然后添加一个系统。

当我向系统GET请求添加包含过滤器时:

{"include":["speakers","amps"]}

它包括扬声器和放大器,但使用System.id作为扬声器和放大器模型的索引,而不是System.speakerId和System.ampId。所以要精通:

System.id = 5 
System.speakerId = 1
System.ampId = 3

它将包含id为5的扬声器和id为5的放大器,而不是包含ID为1的扬声器和ID为3的放大器。

我希望能够列出所有系统,包括相关的扬声器和安培。如何使用Loopback完成此操作。在那一刻我使用上面的模型与内存DB而不是我常用的模型进行测试。任何帮助都将受到赞赏,因为我现在正在撕裂我的头发!

此致 詹姆斯

1 个答案:

答案 0 :(得分:2)

您的模型之间的关系不正确。您需要告诉loopbackjs使用hasMany through relation来获取您的数据。

您的system.json应更改为

"relations": {
"speaker": {
  "type": "belongsTo",
  "model": "Speaker",
  "foreignKey": "speakerId"
},
"amp": {
  "type": "belongsTo",
  "model": "Amp",
  "foreignKey": "ampId"
}},

你的发言人应该是

"relations": {
    "amps": {
      "type": "hasMany",
      "model": "Amp",
      "foreignKey": "speakerId",
      "through": "System"
    },

amp.json

"relations": {
    "speakers": {
      "type": "hasMany",
      "model": "Speaker",
      "foreignKey": "ampId",
      "through": "System"
    },