Цикл 4: как получить родительские данные на основе комбинации запросов родительской и связанной модели - PullRequest
0 голосов
/ 04 февраля 2020

Отношение: Клиент имеет много заказов

Customer
id: number
name: string
Order
id: number
date: number

# assume relation on Customer with "orders" exists.
@belongsTo(Customer)
customerId: number

Как запросить у клиентов такие имена, как "% Kat%" и Дата заказа между (эпохой) 1579828913, 1580828913. Я пытался выполнить запрос ниже, но это не дает требуемых результатов.

{
  "where": {
    "name": {
        "ilike": "%Kat%"
    }
  },
  "include": [
    {
      "relation": "orders",
      "scope": {
         "where": {
             "date": {
                "between": [1579828913, 1580828913]
             }
          }
       }
    }
  ]
}

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

LoopBack 4 теперь позволяет настраивать область видимости. И другие пункты запроса должны быть в состоянии применить с включением также. Например, у вас есть следующие экземпляры режима Customer и Order:

Customer: [
{id: 1, name: 'Luigi'},
{id: 2, name: 'Mario'}
]
Order: [
{id: 1, description: 'Vacuum', customerId: 1},
{id: 2, description: 'Hat', customerId: 1}
]

с запросом:

await customerRepo.find({
        where: {
          name: 'Luigi',
        },
        include: [{relation: 'orders', scope: {where: {description: 'Vacuum'}}}],
      });

Этот запрос позволит вам отфильтровать Customer с name="Luigi", а также отфильтруйте соответствующие заказы с помощью description='Vacuum'.

Ваш запрос кажется правильным. LB4 использует тот же формат для предложения where, что и LB3, ссылка: https://loopback.io/doc/en/lb3/Where-filter.html. Проблема может иметь отношение к определениям модели.

Если у вас все еще есть проблемы с запросами, не стесняйтесь открыть проблему на GitHub: https://github.com/strongloop/loopback-next

0 голосов
/ 05 февраля 2020

Текущее ограничение включенных моделей - невозможность добавить область. См. Здесь, где есть фильтрация по родительской модели: https://loopback.io/doc/en/lb4/Relations.html#limitations Вам придется сделать это вручную, найдя клиентов, а затем заказы.

...