枚举列上的GraphQL过滤器

时间:2019-08-11 15:30:37

标签: graphql strapi

下面是我的GraphQL查询,用于从Strapi后端获取帖子。

请注意,我正在Nuxt应用程序上运行它。

现在我只想带post_status = "Publish"

的帖子

post_status是一个ENUM字段,具有草稿和发布两个选项

query GetPosts{
  posts {
    id
    post_title
    post_excerpt
    post_featured_image{url}
    post_content
    post_category{category_name}
    postingredients{ingredient{ingredient_name}, ingredient_unit}
    updated_at
    post_author{username}
    post_slug    

  }
  }

我不知道如何获得

  1. 如何在我的原始查询中使用post_status
  2. 如何在post_status上进行过滤,在那里我只能获得已发布的帖子。

    query GetStatusEnum{      
        __type(name: "ENUM_POST_POST_STATUS") {
        name
        enumValues {
          name
        } }          }
    

上述结果

{
  "data": {
    "__type": {
      "name": "ENUM_POST_POST_STATUS",
      "enumValues": [
        {
          "name": "Publish"
        },
        {
          "name": "Draft"
        }
      ]
    }
  }
}

2 个答案:

答案 0 :(得分:0)

要将post_status添加到原始请求中,只需将其添加到要获取的属性列表中即可。

{
  posts {
    id
    post_title
    post_status <- here /!\
  }
}

此处是查询,用于获取以Publishpost_status

帖子
{
  posts(where: { post_status: "Publish" }) {
    id
    post_title,
    post_status
  }
}

您可以在trapi应用程序中使用GraphQL游乐场:

http://localhost:1337/graphql

您将在页面的右侧看到一个docs按钮,该按钮将向您显示创建GraphQL请求所需的所有信息。

答案 1 :(得分:0)

我有一个类似的场景(尽管我也使用了Prisma层,所以请记住这一点),我不确定是否可以过滤调用中的枚举值,但可以过滤返回的值。 / p>

const posts = [the array of all posts]

const isPublished = (post) => {
    if (post.post_status.includes('Publish')) {
        return post;
    }
}

let publishedPosts = posts.filter(isPublished);

return publishedPosts;