Loopback4 修改存储库 'findById' 操作中的过滤器参数

Loopback4 modifies filter parameter in repository 'findById' operation

在创建问题之前,我正在这里尝试,因为这可能只是我对如何在 LB4 中使用过滤器的理解。

我在 lb4 应用程序中使用 postgresql 作为数据库。 我做了我的控制器,我的模型,并添加了逻辑。我希望我的模型在响应中返回一些关系,所以我创建了一个将在控制器和存储库中使用的默认过滤器:

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 等其他方法。

感谢您的帮助:)!

这是 a known bug, and has been fixed in @loopback/repository@3.4.0