我目前是商务工具的新手。首先使用 TypeScript SDK,一切看起来都很好,但后来我尝试添加
where
子句或 withWhere
,这样我就可以更准确地在使用 get
或 post
时查询什么内容,但是但不起作用。
我一直在关注这个https://docs.commercetools.com/sdk/sdk-example-code#query-your-product并且也在使用。
在不暴露太多按键和选项的情况下,我创建了类似的东西
const client = clientObject
.withProjectKey(options.projectKey)
.withMiddleware(
createAuthForClientCredentialsFlow(options.authMiddlewareOptions),
)
.withMiddleware(createHttpClient(options.httpMiddlewareOptions))
.withUserAgentMiddleware()
.build();
const apiRoot = createApiBuilderFromCtpClient(client).withProjectKey({
projectKey: options.projectKey,
});
基本上如果我愿意的话
const cart = getApiRoot()
.carts()
.withId({ ID: id })
.get()
.execute()
我会得到我需要的东西,但如果我想添加我无法添加的地方...... 我试过了,没用
const cart = getApiRoot()
.carts()
.withwhere(`"ID = ${id}"`)
.get()
.execute()
我也在下面尝试过
const cart = getApiRoot()
.carts()
.get({
queryArgs: {
where: [`"ID = ${id}"`]
}
})
.execute()
他们都无法正常运行,我想知道是否有人可以指引我正确的方向。
非常感谢您的关注和时间提供意见/建议。
我建议阅读 commercetools 文档的 查询谓词页面,因为它解释了可用于
where
参数的查询。特别是对于购物车,他们列出了可以在此处过滤的字段:https://docs.commercetools.com/api/predicates/query#on-carts
无论如何,关于上面的示例:字段区分大小写,因此这就是“ID”没有返回任何内容的原因。另外,如果您确切知道自己想要什么资源,我通常建议使用
withId()
和 withKey()
。
以下是在购物车上使用
where
的一些工作示例。请注意,要查询的字段不需要引号,但值需要。
查找特定客户电子邮件中的所有购物车:
const cartsWithSpecificCustomerEmail = (customerEmail: string) => {
return apiRoot
.carts()
.get(
{
queryArgs:
{
where: `customerEmail="${customerEmail}"`
}
}
)
.execute()
}
查找具有特定城市送货地址的所有购物车(请注意对象内字段使用括号):
const cartsWithShippingAddressToSpecificCity = (shippingAddressCity: string) => {
return apiRoot
.carts()
.get(
{
queryArgs:
{
where: `shippingAddress(city="${shippingAddressCity}")`
}
}
)
.execute()
}
在同一调用中使用这两个过滤器:
const cartsWithSpecifiedEmailAndShippingAddress = (customerEmail: string, shippingAddressCity: string) => {
return apiRoot
.carts()
.get(
{
queryArgs:
{
where: [
`customerEmail="${customerEmail}"`,
`shippingAddress(city="${shippingAddressCity}")`
]
}
}
)
.execute()
}