Loopback 4 / MongoDB - внешний ключ не преобразован в ObjectID - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь установить отношение hasMany, используя базу данных Mongo.Я следовал руководству по созданию отношения hasMany в документации по loopback 4 (https://loopback.io/doc/en/lb4/HasMany-relation.html)) и пытался установить разные свойства, но внешний ключ custId сохраняется как строка, а не как ObjectID.

Я также нашел несколько других свойств или опций из других тем, но люди использовали Loopback 3, и он не работает с Loopback 4.

Я что-то пропустил или есть обходной путь?

Вот мои модели:

@model()
export class Order extends Entity {
  @property({
    type: 'string',
    id: true,
    generated: true,
  })
  id: string;

  @property({
    type: 'array',
    itemType: 'string',
    required: true,
  })
  product: string[];

  @property({
    type: 'number',
    required: true,
  })
  price: number;

  @property({
    type: 'string',
    id: true,
    generated: true,
  })
  custId: string;

  constructor(data?: Partial<Order>) {
    super(data);
  }
}


@model()
export class Customer extends Entity {
   @property({
      type: 'string',
      id: true,
      generated: true,
   })
   id: string;

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

  @property({
    type: 'string',
  })
  adress?: string;

  @hasMany(() => Order, {keyTo: 'custId'})
    orders?: Order[];

  constructor(data?: Partial<Customer>) {
    super(data);
  }
}

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

В настоящее время это ошибка.В итоге hasMany / ownTo сохранит идентификатор отношения в виде строки вместо ObjectId.Вы можете убедиться в этом, изменив идентификатор в базе данных непосредственно на ObjectId, а затем он найдет его.

Ссылка: https://github.com/strongloop/loopback-next/issues/2085

Он также упоминается здесь в последней ежемесячной вехе,так что, надеюсь, это будет решено в ближайшее время: https://github.com/strongloop/loopback-next/issues/2313

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

@model({
  settings: {
    strictObjectIDCoercion: true,
  }
})
0 голосов
/ 10 октября 2018

Для hasMany отношений необходимо обновить order Модель.

Обновить order.model с помощью:

1. Импорт модели клиента

import {Customer} from './customer.model';

удалить custId: строка;

2. Для справки идентификатора клиента Просто обновите код с

@belongsTo(() => Customer)
  custId: number;

Справочный пример: здесь

...