启用草稿与发布时不能将 status 用作属性名
在 Strapi 5 中,status 是文档服务 API 和 REST API 用于区分草稿与已发布内容的保留参数。在启用了草稿与发布的内容类型上定义一个同样名为 status 的用户自定义属性会导致命名冲突。
本页面是破坏性变更数据库的一部分,提供有关该破坏性变更的信息,以及从 Strapi v4 迁移到 Strapi 5 的附加说明。
破坏性变更说明
在 Strapi v4 中
启用了草稿与发布的内容类型可以有一个名为 status 的用户自定义属性。该属性名与使用 publicationState 参数的发布工作流之间没有冲突。
在 Strapi 5 中
status 是草稿与发布的保留查询参数(它取代了 publicationState)。在启用了草稿与发布的内容类型上定义一个名为 status 的用户属性会导致命名冲突。Strapi 5 按如下方式强制执行此限制:
- 内容类型构建器: 阻止在启用了草稿与发布的任何内容类型上创建
status属性。同时阻止在已拥有status属性的内容类型上启用草稿与发布。 - 服务器启动: 当检测到
status属性与草稿与发布同时存在时,会记录一条警告(每个内容类型 UID 一次)。服务器会继续启动,以免破坏现有项目。
迁移
本节汇总了关于该破坏性变更的有用说明和操作步骤。
说明
status属性名也是 Strapi 5 中更广泛的全局保留名称列表的一部分。完整列表请参阅 部分属性和内容类型名称为保留名称。- 此破坏性变更增加了一个上下文相关的限制:
status冲突仅在内容类型启用了草稿与发布时才被强制执行。 - 有关
status参数如何用于查询草稿与已发布内容的详情,请参阅 草稿与发布。
手动操作步骤
如果某个内容类型拥有 status 属性且启用了草稿与发布(或你打算启用它),请在启用草稿与发布之前重命名 status 属性。
- 在内容类型构建器中,打开拥有
status属性的内容类型。 - 将
status属性重命名为非保留名称(例如approval_status或workflow_state)。 - 点击 保存 以应用模式(schema)变更。
- 更新任何引用旧
status属性名的查询、控制器、服务、策略或前端代码。 - 如果草稿与发布曾被阻止启用,请在内容类型的 高级设置 选项卡中重新启用它。