Loopback4 изменяет параметр фильтра в операции findById репозитория

Я пытаюсь здесь, прежде чем создавать проблему, поскольку это может быть просто мое понимание того, как использовать фильтры в LB4.

Я использую postgresql в качестве базы данных в приложении lb4. Я сделал свой контроллер, свои модели и добавил логику. Я хочу, чтобы мои модели возвращали некоторую связь в ответе, поэтому я создал фильтр по умолчанию, который будет использоваться в контроллере и репозитории:

const includedRelations = {
  include: [
    {
      relation: "licenseeloans",
      scope: {
        include: [
          {
            relation: "member"
          }
        ]
      }
    },
    {
      relation: "weaponloans"
    },
    {
      relation: "initiator"
    },
    {
      relation: "returnInitiator"
    }
  ]
}

А вот и часть контроллера:

  console.log(includedRelations.include[0].scope)
  const newLoanWithRelation = await this.loanRepository.findById(newLoan.id, includedRelations);
  console.log(includedRelations.include[0].scope)

Я обнаружил, что использование этого метода дает мне такой результат:

{ include: [ { relation: 'member' } ] }
{ include: [ { relation: 'member' } ],
  where: { id: '42177991-308b-488c-b9d5-f50496d08281' } }

И следующая итерация:

{ include: [ { relation: 'member' } ],
  where: { and: [ [Object], [Object] ] } }

Это нормальное поведение, когда использование findById с фильтром изменяет объект фильтра (путем заполнения?) Или это ошибка? Какими должны быть мои лучшие варианты, клонирование фильтра включения каждый раз, когда я хочу получить объект из репозитория с отношениями? Я столкнулся с этим, потому что после нескольких запросов мой фильтр был слишком глубоким, и loopback4 выдавал ошибки QUERY_OBJECT_TOO_DEEP.

Примечание: я не проверял другие методы, такие как find и findOne.

Спасибо за помощь :) !


person Sami Tahri    schedule 22.06.2020    source источник


Ответы (1)