如何在 json 格式的环回过滤器中使用范围

How to use scope in loopback filter in json format

我正在尝试从我的 angular 服务调用环回 api。我有一个包含 parcelId 的 parcelStatuses collection,所以我也可以包含包裹 collection,但我还需要检查特定的 vendorId 和那个 vendorId 存在于 parcel collection 中。我正在尝试使用范围来检查特定的 vendorId,但我认为我写的不正确 json syntax/call。这是我在服务中的功能

private getParcelsByFilter(
  limit: number,
  skip: number,
  vendorId: string,
  filter: string
) {
  const checkFilter = {
  "where": {
    "and": [{"statusRepositoryId": filter}]
  },
  "include": [
      {
        "parcel": [
          {
            "scope": {"vendorId": vendorId}
          },
          "parcelStatuses", 
          {"customerData":"customer"}
        ]
      }
    ],
    "limit": limit,
    "skip": skip,
  }

  return this._http.get<IParcel[]>(
    `${environment.url}/ParcelStatuses?filter=${encodeURIComponent(JSON.stringify(checkFilter))}`
  );
}

这是我的 parcelStatus 演示视图 collection object

[{
 "id":"lbh24214",
 "statusRepositoryId":"3214fsad",
 "parcelId":"LH21421"
}]

包裹的演示json

[{
 "id":"LHE21421",
 "customerDataId":"214fdsas",
 "customerId":"412dsf",
 "vendorId":"123421"
}]

请帮我写正确的调用

除了格式化,查询还有几个问题:

不需要and

这一行:

where: {
  and: [{statusRepositoryId: filter}]
}

可以简化为:

where: {
  statusRepositoryId: filter
}

因为只有1个where条件,and变得多余。

滥用 includescope

include 用于包含关系,而 scope 对这些关系应用过滤器。他们可以协同工作以创建综合查询:

include: [
  {
    relation: "parcels",
    scope: {
      where: {vendorId: vendorId},
    }
  }
],

这将包括 parcels 关系作为响应的一部分,同时使用 where 过滤器过滤 parcels 关系。


这意味着最终代码应类似于以下内容:

private getParcelsByFilter(
  limit: number,
  skip: number,
  vendorId: string,
  filter: string
) {
  const checkFilter = {
  where: {statusRepositoryId: filter},
  include: [
      {
        relation: "parcels",
        scope: {
          where: {vendorId: vendorId},
        }
      }
    ],
    limit: limit,
    skip: skip,
  }

  return this._http.get<IParcel[]>(
    `${environment.url}/ParcelStatuses?filter=${encodeURIComponent(JSON.stringify(checkFilter))}`
  );
}

进一步阅读

请查看这些资源以更好地了解如何使用过滤器。