集合配置

Collection(集合)是一组共享相同 schema 的记录,称为 Document(文档)。你可以根据应用需求定义任意数量的 Collections。每个 Collection 中的 Document 都会基于你定义的 Fields 存储在 Database 中,并自动生成用于管理文档的 Local APIREST APIGraphQL API

Collections 也用于实现 Payload 中的 Authentication。通过定义带有 auth 选项的 Collection,该 Collection 将获得支持用户认证的额外操作。

Collections 是构建应用中重复数据的主要方式,例如用户、产品、页面、文章以及其他你可能需要管理的内容类型。每个 Collection 都可以拥有自己独特的 Access ControlHooksAdmin Options 等功能。

要定义 Collection Config,请在你的 Payload Config 中使用 collection 属性:

import { buildConfig } from 'payload'

export default buildConfig({
  // ...
  collections: [
    // highlight-line
    // 你的 Collections 定义在这里
  ],
})

提示: 如果你的 Collection 只需要包含单个 Document, 考虑使用 Global 替代。

配置选项

最佳实践通常是将你的 Collections 写在单独的文件中,然后导入到主 Payload 配置 中。

以下是一个简单的 Collection 配置示例:

import type { CollectionConfig } from 'payload'

export const Posts: CollectionConfig = {
  slug: 'posts',
  fields: [
    {
      name: 'title',
      type: 'text',
    },
  ],
}

提醒: 更多复杂示例,请查看 Payload 仓库中的 模板示例 目录。

以下是可用的配置选项:

选项描述
admin管理面板的配置选项。更多详情
access提供访问控制函数,精确控制谁可以对此 Collection 中的文档执行什么操作。更多详情
auth如果希望此 Collection 支持认证功能,可指定相关选项。更多详情
custom用于添加自定义数据的扩展点(例如插件使用)
disableDuplicate设为 true 时,在此 Collection 的文档编辑界面不显示"复制"按钮,并阻止所有 API 的 duplicate 操作。
defaultSort指定在 Collection 列表视图中默认排序的顶级字段。在字段名前加减号("-")表示降序排序。可通过字符串数组指定多个字段。
dbName根据数据库适配器自定义表名或 Collection 名。如果未定义,则根据 slug 自动生成。
endpoints向 REST API 添加自定义路由。设为 false 可禁用路由。更多详情
fields *字段类型数组,决定此 Collection 中存储数据的结构和功能。更多详情
graphQL管理此 Collection 的 GraphQL 相关属性。更多详情
hooks钩子函数的入口点。更多详情
orderable设为 true 时,启用 Collection 的自定义排序功能,文档可通过拖放重新排序。使用分数索引实现高效重排序。
labels用于在整个 Payload 中标识此 Collection 的单数和复数标签。如果未定义,则根据 slug 自动生成。
enableQueryPresets为此 Collection 启用查询预设。更多详情
lockDocuments启用或禁用文档锁定功能。默认启用文档锁定。设为对象可进行配置,设为 false 可禁用锁定。更多详情
slug *唯一的 URL 友好字符串,作为此 Collection 的标识符。
timestamps设为 false 可禁用文档自动生成的 createdAtupdatedAt 时间戳。
typescript包含 interface 属性的对象,用于模式生成时的文本。如果未定义,则根据 slug 自动生成。
upload如果希望此 Collection 支持文件上传功能,可指定相关选项。详情请参阅上传文档。
versions设为 true 启用默认选项,或通过对象属性进行配置。更多详情
defaultPopulate指定当从另一个文档填充此 Collection 时要选择的字段。更多详情
indexes为此 Collection 定义复合索引。可用于加速同时基于 2 个或更多字段的查询/排序,或确保多个字段之间的唯一性。
forceSelect指定无论 select 查询如何都应始终选择的字段,这对于访问控制/钩子中需要该字段存在的情况很有用

* 星号表示该属性是必填项。

字段

Fields(字段)定义了 Collection 中 Documents 的数据结构。要了解更多信息,请参阅 Fields 文档。

访问控制

Collection Access Control(集合访问控制)决定了用户可以对 Collection 中的任何给定 Document 执行哪些操作。要了解更多信息,请参阅 Access Control 文档。

钩子

Collection Hooks(集合钩子)允许你挂接到 Documents 的生命周期中,从而在特定事件期间执行自定义逻辑。要了解更多信息,请参阅 Hooks 文档。

管理选项

Admin Panel 中的 Collections 行为可以完全自定义,以满足你的应用需求。这包括分组或隐藏导航链接、添加自定义组件、选择在列表视图中显示哪些字段等。

要为 Collections 配置管理选项,请在 Collection Config 中使用 admin 属性:

import type { CollectionConfig } from 'payload'

export const MyCollection: CollectionConfig = {
  // ...
  admin: {
    // highlight-line
    // ...
  },
}

可用选项如下:

选项描述
group用于在管理导航中分组 Collection 和 Global 链接的文本或本地化对象。设置为 false 可从导航中隐藏链接,同时保持其路由可访问。
hidden设置为 true 或一个函数(接收当前用户作为参数),返回 true 时将从导航和管理路由中排除此 Collection。
hooks此 Collection 的管理特定钩子。更多详情
useAsTitle指定一个顶级字段作为整个 Admin Panel 中的文档标题。如果未定义字段,则使用文档 ID 作为标题。具有 virtual: true 的字段不能用作标题,除非它链接到关系字段。
description在列表视图中显示在 Collection 标签下方的文本,为编辑者提供更多信息。或者,你可以使用 admin.components.Description 来渲染 React 组件。更多详情
defaultColumns字段名称数组,对应在此 Collection 的列表视图中默认显示的列。
disableCopyToLocale在此 Collection 中编辑文档时禁用"复制到语言环境"按钮。仅在启用本地化时适用。
hideAPIURL在此 Collection 中编辑文档时隐藏"API URL"元字段。
enableRichTextLinkRich Text 字段具有 Link 元素,允许用户在其富文本中自动引用相关文档。默认设置为 true
enableRichTextRelationshipRich Text 字段具有 Relationship 元素,允许用户在其富文本中自动引用相关文档。默认设置为 true
folders布尔值,用于为给定 Collection 启用文件夹功能。默认为 false更多详情
meta在 Admin Panel 中应用于此 Collection 的页面元数据覆盖。更多详情
preview生成 Admin Panel 内预览 URL 的函数,可以指向你的应用。更多详情
livePreview启用实时编辑功能,即时获取前端应用的视觉反馈。更多详情
components替换为你自己的 React 组件,用于此 Collection 内部。更多详情
listSearchableFields指定在列表搜索视图中应搜索哪些字段。更多详情
pagination为此 Collection 设置分页特定选项。更多详情
baseListFilter你可以为此 Collection 的列表视图定义默认的基础过滤器,它将与用户执行的任何过滤器合并。

自定义组件

Collections(集合)可以设置自己的自定义组件,这些组件仅适用于Admin Panel中特定于集合的UI界面。这包括诸如保存按钮等元素,或者整个布局如编辑视图。

要覆盖集合组件,可以在集合配置中使用 admin.components 属性:

import type { CollectionConfig } from 'payload'

export const MyCollection: CollectionConfig = {
  // ...
  admin: {
    components: {
      // highlight-line
      // ...
    },
  },
}

以下是可用的配置选项:

OptionDescription
afterList在默认列表视图_之后_注入的组件数组。更多详情
afterListTable在默认列表视图表格_之后_注入的组件数组。更多详情
beforeList在默认列表视图_之前_注入的组件数组。更多详情
beforeListTable在默认列表视图表格_之前_注入的组件数组。更多详情
listMenuItems在列表控件旁边(列和筛选选项之后)的菜单中渲染的组件数组
Description在列表视图中集合标签下方渲染的组件。可作为 admin.description 属性的替代方案。更多详情
edit覆盖编辑视图中的特定组件。更多详情
views在Admin Panel中覆盖或创建新视图。更多详情

编辑视图选项

import type { CollectionConfig } from 'payload'

export const MyCollection: CollectionConfig = {
  // ...
  admin: {
    components: {
      edit: {
        // highlight-line
        // ...
      },
    },
  },
}

以下是可用的选项:

选项描述
beforeDocumentControls在保存/发布按钮前注入自定义组件。更多详情
editMenuItems在文档控制栏的三点菜单下拉框中注入自定义组件。更多详情
SaveButton替换编辑视图中的默认保存按钮。草稿功能必须禁用。更多详情
SaveDraftButton替换编辑视图中的默认保存草稿按钮。草稿功能必须启用且自动保存必须禁用。更多详情
PublishButton替换编辑视图中的默认发布按钮。草稿功能必须启用。更多详情
PreviewButton替换编辑视图中的默认预览按钮。预览功能必须启用。更多详情
Upload替换编辑视图中的默认上传组件。上传功能必须启用。更多详情

注意: 关于如何构建自定义组件的详细信息,请参阅构建自定义组件

分页

所有 Collections 都会获得自己的列表视图(List View),该视图显示可分页、可排序和可筛选的文档列表。列表视图的分页行为可以针对每个 Collection 进行自定义,并使用 Payload 提供的相同 Pagination API。

要配置分页选项,可以在 Collection Config 中使用 admin.pagination 属性:

import type { CollectionConfig } from 'payload'

export const Posts: CollectionConfig = {
  // ...
  admin: {
    // highlight-start
    pagination: {
      defaultLimit: 10,
      limits: [10, 20, 50],
    },
    // highlight-end
  },
}

可用的配置选项如下:

选项描述
defaultLimit指定默认每页显示数量的整数,默认为 10。
limits提供一个整数数组,作为管理员在列表视图中可选择的分页选项。

可搜索字段列表

在列表视图(List View)中,有一个"搜索"框允许你通过简单的文本搜索快速查找文档。默认情况下,它会搜索 ID 字段。如果定义了 admin.useAsTitle 字段,则会使用该字段。或者,你可以根据应用需求明确指定要搜索的字段。

要定义哪些字段应该被搜索,可以在 Collection Config 中使用 admin.listSearchableFields 属性:

import type { CollectionConfig } from 'payload'

export const Posts: CollectionConfig = {
  // ...
  admin: {
    // highlight-start
    listSearchableFields: ['title', 'slug'],
    // highlight-end
  },
}

提示: 如果添加了 listSearchableFields,请确保为这些字段建立索引,以保持管理界面查询的性能。

GraphQL

你可以通过在 collection 配置中设置 graphQL: false 来完全禁用该 collection 的 GraphQL 功能。这将完全禁用所有对应的查询(query)、变更(mutation)和类型(type)出现在 GraphQL 模式中。

你也可以向 collection 的 graphQL 属性传递一个对象,该对象允许你定义以下属性:

选项描述
singularName覆盖在 GraphQL 模式生成中使用的"单数"名称。
pluralName覆盖在 GraphQL 模式生成中使用的"复数"名称。
disableQueries通过设置为 true 来禁用与该 collection 相关的所有 GraphQL 查询。
disableMutations通过设置为 true 来禁用与该 collection 相关的所有 GraphQL 变更操作。

TypeScript

你可以从 Payload 导入类型,这有助于更轻松且类型安全地编写 Collection 配置。主要有两种类型代表 Collection Config:CollectionConfigSanitizedCollectionConfig

CollectionConfig 类型表示原始的完整 Collection Config,其中只有最基本的属性被标记为必需。SanitizedCollectionConfig 类型表示经过完全清理后的 Collection Config。通常,这个类型仅在 Payload 内部使用。

import type { CollectionConfig, SanitizedCollectionConfig } from 'payload'