Strapi: добавить элемент в коллекцию chid - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть два типа коллекций: Организации и Сотрудники. Это отношения один ко многим между Организацией и Сотрудником.

Я хочу добавить нового сотрудника в организацию с помощью rest api call в strapi.

Strapi не предоставляет:

http://localhost:1337/organizations/{id}/employees

Как выполнить обновление?

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Как сказал Кристиан, вам придется создать свой собственный маршрут в API вашей организации.

  1. Создать свой маршрут.

Путь - api/organization/config/routes.json

{
  "routes": [
    {
      "method": "POST",
      "path": "/organizations/:id/employees",
      "handler": "organization.cusom",
      "config": {
        "policies": []
      }
    },
    ...
  ]
}
Создание функции контроллера.

Для этого я скопирую функцию из create по умолчанию:

https://strapi.io/documentation/3.0.0-beta.x/concepts/controllers.html#core -контроллеров

Путь - `api / organization / controllers / organizaion.js`` *

const { parseMultipartData, sanitizeEntity } = require('strapi-utils');

module.exports = {
  async custom(ctx) {
    let entity;
    if (ctx.is('multipart')) {
      const { data, files } = parseMultipartData(ctx);
      entity = await strapi.services.employee.create(data, { files });
    } else {
      entity = await strapi.services.employee.create(ctx.request.body);
    }
    return sanitizeEntity(entity, { model: strapi.models.employee });
  },
};

И установите employee для создания, потому что мы хотим создать сотрудника .

Принудительно использовать правильный идентификатор организации
module.exports = {
  async custom(ctx) {
    // get the id params from the URL
    const {id} = ctx.params;
    // force the relation to this specific organisation
    ctx.request.body.organization = id;

    if (ctx.is('multipart')) {
      const { data, files } = parseMultipartData(ctx);
      entity = await strapi.services.employee.create(data, { files });
    } else {
      entity = await strapi.services.employee.create(ctx.request.body);
    }
    return sanitizeEntity(entity, { model: strapi.models.employee });
  },
};
0 голосов
/ 14 апреля 2020

Не существует уже встроенного решения для этого.

Но в Strapi вы можете создать свой собственный контроллер, соответствующий этому маршруту, и обрабатывать все необходимые ему логики c.

Вы можете проверить информацию о пользовательских контроллерах здесь

...