2015-08-27 3 views
2

Я использовал разные модели, чтобы упростить то, что я пытаюсь достичь, и удалить беспорядок, хотя теория должна быть такой же, как мой фактический проект.Loopback API включает фильтры, которые не работают должным образом

Используйте следующие допущения: система может иметь только один тип динамиков и один тип усилителя.

Скажем, у меня есть следующие модели:

*** 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, и идти, чтобы создать новый экземпляр спикера или 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 Explorer. Поэтому я добавляю несколько динамиков и усилителей, затем добавляю систему.

Когда я добавляю включить фильтр на запрос системы GET:

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

Она включает в себя акустические системы и усилители, но с использованием System.id в качестве индекса для громкоговорители и усилители Модели вместо System.speakerId и System.ampId. Так ellaborate если:

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

Он будет включать в себя динамик с идентификатором 5 и усилитель с идентификатором 5 вместо включения громкоговорителя с идентификатором 1 и Amp с идентификатором 3.

Я хочу, чтобы иметь возможность перечислять все системы, в том числе связанные с ними динамики и усилители. Как это можно сделать с помощью Loopback. В тот момент, когда я использую приведенные выше модели, в БД памяти вместо обычных, чтобы проверить. Любая помощь будет оценена, поскольку я сейчас нахожусь в том, чтобы вырвать мои волосы!

С уважением, Джеймс

ответ

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" 
    },