You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Strapi GraphQL查询DRAFT状态返回已发布内容问题咨询

Strapi Draft & Publish GraphQL 查询过滤异常问题解决

问题概述

启用Draft & Publish功能的Strapi作为无头CMS,通过GraphQL查询葡萄酒数据时出现以下异常:

  • 设置status: "DRAFT"时,返回结果同时包含草稿和已发布产品的草稿副本,且所有结果的publishedAt字段均为null
  • 设置status: "PUBLISHED"时,可正确仅返回已发布产品(publishedAt含有效时间戳)

使用的GraphQL查询:

query($filters: WineFiltersInput, $status: PublicationStatus) {
  wines(filters: $filters, status: $status) {
    title
    vintage
    documentId
    lot_number
    user {
      username
    }
    publishedAt
  }
}

草稿状态变量:

{
  "filters": {
    "user": {
      "username": {
        "eq": "wineCompany"
      }
    }
  },
  "status": "DRAFT"
}

疑问解答与解决方案

1. 为何DRAFT状态返回已发布产品且publishedAt为null?

Strapi的Draft & Publish机制中,草稿和已发布版本是独立的文档实例。当查询status: "DRAFT"时,实际是获取所有内容的草稿版本——包括那些已经发布但存在未提交草稿的内容。这些草稿版本本身没有publishedAt值,所以返回的publishedAt全为null,你看到的"已发布产品"其实是它们的草稿副本,而非正式发布版本。

2. 是否忽略了Strapi处理PublicationStatus的规则?

是的,你误解了status参数的作用:

  • status: "PUBLISHED":仅获取内容的已发布正式版本
  • status: "DRAFT":仅获取内容的草稿版本(无论该内容是否有已发布版本)
  • 不指定status:默认只返回已发布版本

另外,Strapi的GraphQL中,草稿版本的publishedAt字段永远为null,只有已发布版本会填充该字段。

3. 如何正确过滤纯草稿内容?

要获取从未发布过的纯草稿内容(无对应已发布版本),需结合publishedAt过滤和status参数:

query($filters: WineFiltersInput) {
  wines(filters: {
    ...$filters,
    publishedAt: { null: true }
  }, status: "DRAFT") {
    title
    vintage
    documentId
    lot_number
    user {
      username
    }
    publishedAt
  }
}

通过publishedAt: { null: true }筛选从未发布的内容,再配合status: "DRAFT"确保获取的是草稿版本。

4. 如何获取所有产品(含草稿和已发布)?

要同时获取所有内容的最新版本(有草稿则返回草稿,无草稿则返回已发布版本),使用Strapi官方推荐的publicationState参数,设置为PREVIEW:

query($filters: WineFiltersInput) {
  wines(filters: $filters, publicationState: PREVIEW) {
    title
    vintage
    documentId
    lot_number
    user {
      username
    }
    publishedAt
    status # 新增此字段可查看内容的发布状态
  }
}

如果需要同时获取同一内容的草稿和已发布两个版本,GraphQL API默认不支持,需直接通过数据库查询或自定义Strapi路由实现。


额外注意事项

  • 确保请求用户的角色权限中,已开启对应内容类型的"查看草稿"权限(在Strapi后台的角色设置中配置)
  • Strapi v4中,publicationState是控制内容可见性的标准参数,status为旧版兼容参数,建议优先使用publicationState

内容的提问来源于stack exchange,提问作者david

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 03:02:09