Цикл 4: отправка связанных данных

#typescript #loopbackjs #v4l2loopback

#typescript #loopbackjs #обратный цикл v4l2

Вопрос:

У меня есть форма, в которой я могу зарегистрировать пользователя с одним или несколькими адресами. Чтобы упростить ситуацию, я отправляю в loopback:

 {
  "id": 0,
  "name": "User Name",
  "addresses": [
    {
      "street": "xx",
      "city": "xx",
      "country": "xx"
    },
    {
      "street": "yy",
      "city": "yy",
      "country": "yy"
    }
  ]
}
  

В моей пользовательской модели, которую я определил (у меня тоже есть адресная модель):

 export class User extends Entity {
  @property({
    type: 'number',
    id: true,
    required: true,
  })
  id: number;

@property({
    type: 'string',
    required: true,
  })
  name: string;

 @hasMany(() => Address, {keyTo: ‘user_id’})
  Addresses: Array<Address>;
}
  

Также в UserRepository я определил:

 this.addresses = this.createHasManyRepositoryFactoryFor(
      'addresses',
      AddressRepositoryGetter,
    );
  

Когда я отправляю json, обратный цикл выдает следующую ошибку:

 {
  "error": {
    "statusCode": 422,
    "name": "ValidationError",
    "message": "The `user` instance is not valid. Details: `addresses` is not defined in the model (value: undefined).",
    "details": {
      "context": "user",
      "codes": {
        "addresses": [
          "unknown-property"
        ]
      },
      "messages": {
        "addresses": [
          "is not defined in the model"
        ]
      }
    }
  }
}
  

Я предполагаю, что отношение «адреса» не считается свойством модели. Как я могу это решить?. Я знаю, что у меня есть возможность выполнить отдельный запрос для сохранения адресов, но я хочу избежать этого.

Ответ №1:

На самом деле эта ошибка выдается datasource juggler, который является базовой библиотекой соединителей для подключения к базе данных. Кажется, столбец адресов не определен в вашей базе данных в таблице User. Пожалуйста, проверьте это.

Комментарии:

1. Спасибо, да, это было все. Как я могу отправить связанные данные в том же запросе? Адреса — это массив, который будет обрабатываться в модели адресов

2. Точно так же, как вы уже отправляете. Вам просто нужно убедиться, что в базе данных есть этот столбец. Однако juggler иногда ведет себя странно. Поэтому в таких случаях я предпочитаю обрабатывать связанные данные отдельно самостоятельно в контроллере. Связанные данные отправляются как есть в том же запросе, но обрабатываются отдельно в контроллере. Попробуйте это, если juggler не создает связанные модели самостоятельно.

3. Я отправлю связанные данные отдельно для обработки в контроллере. Спасибо за совет.