环回 API 包括未按预期工作的过滤器

Loopback API include filters not working as expected

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

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

假设我有以下型号:

*** 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 Explorer 并去创建 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 完成此操作。目前,我将上述模型与内存数据库一起使用,而不是我通常使用的模型,只是为了测试。任何帮助将不胜感激,因为我现在正要撕掉我的头发!

此致, 詹姆斯

您的模型之间的关系不正确。你需要告诉 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"
    },