2016-12-12 10 views
0

Как вы запрашиваете данные ссылки/поиска и правильное отношение к построению между моделями для их поддержки?Параметры запроса/поиска в LoopBack

Пример:

Адрес модель имеет поле, представляющее город адрес находится. В городской модели есть предварительно заполненный список городов. Я хочу построить петлевое отношение между двумя моделями, так что я могу ссылаться на город при добавлении нового адреса и при запросе адреса вернуть город как часть адреса.

В реляционном db вы можете иметь внешний ключ, который позволяет говорить CityId, который заполняется ссылкой на город. Затем вы можете запросить таблицу адресов и включить соединение с таблицей города, чтобы вернуть город, связанный с адресом.

В шлейфе У меня есть следующие модели (вырублены для примера):

Адреса Модель

{ 
    "name": "Address", 
    "base": "PersistedModel", 
    "idInjection": true, 
    "options": { 
     "validateUpsert": true 
    }, 
    "properties": { 
     "addressLineOne": { 
      "type": "string", 
      "required": true 
     }, 
    }, 
    "validations": [], 
    "relations": {  
     "city": { 
      "type": "hasOne", 
      "model": "city", 
      "foreignKey": "cityId" 
     } 
    }, 
    "acls": [], 
    "methods": {} 
} 

City Model

{ 
    "name": "City", 
    "base": "PersistedModel", 
    "idInjection": true, 
    "options": { 
     "validateUpsert": true 
    }, 
    "properties": { 
     "cityName": { 
      "type": "string", 
      "required": true 
     } 
    }, 
    "validations": [], 
    "relations": {}, 
    "acls": [], 
    "methods": {} 
} 

ответ

1

Для связи с изменением модели Адреса от hasOne доставляется:

... 
"relations": {  
    "city": { 
     "type": "belongsTo", 
     "model": "City", 
     "foreignKey": "cityId" 
    } 
} 
... 

BelongsTo отношение добавляет внешний ключ к модели Address. Поэтому каждый адрес будет иметь идентификатор cityId.

А для модели City вы можете добавить отношение как так:

"relations": {  
    "addresses": { 
     "type": "hasMany", 
     "model": "Address", 
     "foreignKey": "cityId" 
    } 
} 

Теперь вы сможете получить все адреса для любого города.

P.S. Я уверен, что при настройке отношения, вы должны использовать точное название модели для модели: «модель»: «Город» или «модель»: «Адрес», как вы выставиться его в описании модели:

{ 
    "name": "Address", 
    "base": "PersistedModel", 
    "idInjection": true, 
... 
+0

Спасибо Mantas. Вы знаете, как я могу запросить сгенерированный интерфейс отдыха, чтобы вернуть город как часть адреса? Что-то вроде/api/Addresses? Filter [include] = city - это то, что я ожидал от работы. – Boden

+1

Он должен работать таким образом. Если нет, то вы можете попробовать добавить json: /api/Addresses? Filter = {"include": ["relationName"]} P.S. «отношениеName» должно быть именем отношения, не связанным с именем модели, поскольку некоторые люди смешивают их. – Mantas