Я пытаюсь здесь, прежде чем создавать проблему, поскольку это может быть просто мое понимание того, как использовать фильтры в 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.
Спасибо за помощь :) !