如何在 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
变得多余。
滥用 include
和 scope
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))}`
);
}
进一步阅读
请查看这些资源以更好地了解如何使用过滤器。
我正在尝试从我的 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
变得多余。
滥用 include
和 scope
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))}`
);
}
进一步阅读
请查看这些资源以更好地了解如何使用过滤器。