La API de loopback incluye filtros que no funcionan como se esperaba

He usado diferentes modelos para simplificar lo que estoy tratando de lograr y eliminar el desorden, aunque la teoría debería ser la misma que mi proyecto real.

Utilice los siguientes supuestos: un sistema solo puede tener un tipo de altavoz y un tipo de amplificador.

Digamos que tengo los siguientes modelos:

*** System *** - id - name - speakerId - ampId *** Speaker *** - id - name *** Amp *** - id - name 

He añadido lo siguiente a mi archivo de modelo System.json (que creo que es correcto):

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

Cuando inicio mi aplicación y abro el Explorador de API y voy a crear una nueva instancia de Speaker o Amp, se espera lo siguiente:

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

Si cambio el archivo del modelo System.json para que se vea así (lo que creo que es la forma incorrecta de hacerlo):

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

Todo se ve bien en el explorador de API. Así que agrego algunos parlantes y amplificadores, luego agrego un sistema.

Cuando agrego un filtro de inclusión a la solicitud GET del sistema:

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

Incluye los altavoces y los amplificadores, pero usa el System.id como el índice para los modelos de altavoces y amplificadores en lugar de System.speakerId y System.ampId. Entonces, para elaborar si:

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

Incluirá el altavoz con una id de 5 y el amplificador con la id de 5 en lugar de incluir el parlante con una id de 1 y el amplificador con una id de 3.

Quiero poder listar todos los sistemas, incluidos sus parlantes y amplificadores relacionados. ¿Cómo se puede hacer esto con Loopback? En el momento en que estoy usando los modelos anteriores con en memoria DB en lugar de los habituales, solo para probar. Cualquier ayuda sería apreciada ya que estoy a punto de arrancarme el cabello.

Saludos, James

Tu relación entre modelos no es correcta. Debe indicar a loopbackjs que use hasMany a través de la relación para obtener sus datos.

Su system.json debe cambiarse a

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

Y tus altavoces deberían estar

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

amp.json

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