Loopback: связь через - не работает - PullRequest
0 голосов
/ 02 мая 2018

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

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

так у меня 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": {}
}

клиент-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"
  }
]

А потом я иду к своему

локальный: 3000 / исследователь

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

вот так

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

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

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

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

Но потом, когда я иду в "GET client / id" и делаю

id: 59876185508eb519385779c6 фильтр: {"включить": ["команды"]} ​​

это ответ

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

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

id: 5ae8a37add2989a32d37f83d фильтр: {"включить": ["клиенты"]}

или если я зайду в «GET команды / {id} / клиентов» и положи id: 5ae8a37add2989a32d37f83d

Я получаю

[]

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

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

1 Ответ

0 голосов
/ 02 мая 2018

Здесь есть три вопроса:

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

клиент-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": {}
}
...