Loopback: Relation Through - не работает

Итак, я застрял в проблеме, которая должна быть простой, и я уверен, что упускаю что-то очевидное.

Я слежу за этой документацией:

так что у меня есть 3 стола

клиент, команда, клиент-команда

client.json

{
  "name": "client",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "name": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {
    "teams": {
      "type": "hasMany",
      "model": "team",
      "foreignKey": "teamId",
      "through": "client-team"
    }
  },
  "acls": [],
  "methods": {}
}

team.json

{
  "name": "team",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "type": {
      "type": "string",
      "required": true,
      "default": "first-team"
    },
    "name": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {
    "clients": {
      "type": "hasMany",
      "model": "client",
      "foreignKey": "clientId",
      "through": "client-team"
    }
  },
  "acls": [],
  "methods": {}
}

client-team.json

{
  "name": "client-team",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "clientId": {
      "type": "string",
      "required": true
    },
    "teamId": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {
    "client": {
      "type": "belongsTo",
      "model": "Client",
      "foreignKey": "clientId"
    },
    "team": {
      "type": "belongsTo",
      "model": "Team",
      "foreignKey": "teamId"
    }
  },
  "acls": [],
  "methods": {}
}

так что все отношения установлены правильно (я думаю) ...

то в моих клиентах у меня есть 1 клиент

[
  {
    "name": "Client name",
    "id": "59876185508eb519385779c6"
  }
]

а в моих командах их много, но точно это:

[
  {
    "type": "type",
    "name": "Team name",
    "id": "5ae8a37add2989a32d37f83d"
  }
]

И тогда я иду к своему

localhost:3000/explorer

Опубликовать команду клиента

как это

{
    "clientId": "59876185508eb519385779c6",
    "teamId": "5ae8a37add2989a32d37f83d"
}

и я получаю ответ 200:

{
  "clientId": "59876185508eb519385779c6",
  "teamId": "5ae8a37add2989a32d37f83d",
  "id": "5ae961873a7e3b33f0579fc3"
}

так что связь есть ....

Но затем, когда я перехожу к «ПОЛУЧИТЬ клиент / идентификатор» и делаю

id: 59876185508eb519385779c6 filter: {"include":["teams"]}

это ответ

{
  "name": "Chelsea FC",
  "id": "59876185508eb519385779c6",
  "teams": []
}

То же самое происходит в "GET team / id", и я использую

id: 5ae8a37add2989a32d37f83d filter: {"include":["clients"]}

или если я перейду к "ПОЛУЧИТЬ команды / {id} / клиенты" и положи идентификатор: 5ae8a37add2989a32d37f83d

я получил

[]

Так что я делаю не так? Я уверен, что упускаю одну глупую очевидную вещь: /

используя монго, если это имеет значение

Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
0
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Здесь есть три проблемы:

  1. Вы описали идентификаторы mongodb как строку, поэтому вы храните строки в базе данных вместо идентификаторов объектов. (это не требуется, поскольку источник данных должен понимать реальный тип)
  2. Ваши модели начинаются со строчной буквы. То же должно быть и в отношениях. (первая часть проблемы, это устранение проблемы с идентификаторами)
  3. Неправильные отношения для моделей клиента и команды (вторая часть проблемы, ее устранение)

client-team.json

{
  "name": "client-team",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "clientId": {
      "type": "objectId", // !!! changed (not required)
      "required": true
    },
    "teamId": {
      "type": "objectId", // !!! changed (not required)
      "required": true
    }
  },
  "validations": [],
  "relations": {
    "client": {
      "type": "belongsTo",
      "model": "client",  // !!! changed
      "foreignKey": "clientId"
    },
    "team": {
      "type": "belongsTo",
      "model": "team",  // !!! changed
      "foreignKey": "teamId"
    }
  },
  "acls": [],
  "methods": {}
}

client.json

{
  "name": "client",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "name": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {
    "teams": {
      "type": "hasMany",
      "model": "team",
      "foreignKey": "clientId", // !!! changed (we describing id of this model, not team)
      "through": "client-team"
    }
  },
  "acls": [],
  "methods": {}
}

team.json

{
  "name": "team",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "type": {
      "type": "string",
      "required": true,
      "default": "first-team"
    },
    "name": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {
    "clients": {
      "type": "hasMany",
      "model": "client",
      "foreignKey": "teamId", // !!! changed (the same as the previous)
      "through": "client-team"
    }
  },
  "acls": [],
  "methods": {}
}

@DS_web_developer, позвольте мне проверить

Maxim Sharai 02.05.2018 11:10

@DS_web_developer перепроверьте мой комментарий

Maxim Sharai 02.05.2018 11:40

нет ... все еще 0, это ничего не меняет ... проводник по-прежнему дает мне возможность публиковать как строку ... и если я это сделаю ... все равно получу пустой массив

DS_web_developer 02.05.2018 11:49

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

DS_web_developer 02.05.2018 12:00

Хм .... не так быстро ... Я воссоздал это с моделями db, а не с mongo, где id были числовыми ..... Я пытался сделать это с mongo ... и это не работает: /

DS_web_developer 02.05.2018 12:08

это работает ... спасибо! Я знал, что совершаю такую ​​глупую ошибку: / Вы заслуживаете пинты или двух!

DS_web_developer 02.05.2018 12:28

Другие вопросы по теме