集合配置
Collection(集合)是一组共享相同 schema 的记录,称为 Document(文档)。你可以根据应用需求定义任意数量的 Collections。每个 Collection 中的 Document 都会基于你定义的 Fields 存储在 Database 中,并自动生成用于管理文档的 Local API、REST API 和 GraphQL API。
Collections 也用于实现 Payload 中的 Authentication。通过定义带有 auth
选项的 Collection,该 Collection 将获得支持用户认证的额外操作。
Collections 是构建应用中重复数据的主要方式,例如用户、产品、页面、文章以及其他你可能需要管理的内容类型。每个 Collection 都可以拥有自己独特的 Access Control、Hooks、Admin 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',
},
],
}
以下是可用的配置选项:
选项 | 描述 |
---|---|
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 可禁用文档自动生成的 createdAt 和 updatedAt 时间戳。 |
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"元字段。 |
enableRichTextLink | Rich Text 字段具有 Link 元素,允许用户在其富文本中自动引用相关文档。默认设置为 true 。 |
enableRichTextRelationship | Rich 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
// ...
},
},
}
以下是可用的配置选项:
Option | Description |
---|---|
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:CollectionConfig
和 SanitizedCollectionConfig
。
CollectionConfig
类型表示原始的完整 Collection Config,其中只有最基本的属性被标记为必需。SanitizedCollectionConfig
类型表示经过完全清理后的 Collection Config。通常,这个类型仅在 Payload 内部使用。
import type { CollectionConfig, SanitizedCollectionConfig } from 'payload'