commercetools nodejs sdk 使用 where 或 withWhere 进行查询不起作用

问题描述 投票:0回答:1

我目前是商务工具的新手。首先使用 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()

他们都无法正常运行,我想知道是否有人可以指引我正确的方向。

非常感谢您的关注和时间提供意见/建议。

javascript typescript sdk where-clause commercetools
1个回答
0
投票

我建议阅读 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()
}
© www.soinside.com 2019 - 2024. All rights reserved.