环回 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"
},
我使用了不同的模型来简化我想要实现的目标并消除混乱,尽管理论应该与我的实际项目相同。
使用以下假设:一个系统只能有一种扬声器和一种放大器。
假设我有以下型号:
*** 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"
},