我使用不同的模型来简化我想要实现的目标并消除混乱,尽管理论应该与我的实际项目相同。
使用以下假设:系统只能有一种类型的扬声器和一种类型的放大器。
说我有以下型号:
*** 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而不是我常用的模型进行测试。任何帮助都将受到赞赏,因为我现在正在撕裂我的头发!
此致 詹姆斯
答案 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"
},