Keystone 以何种方式“不允许”这样做?你有错误吗?如果没有关于正在发生的事情的具体信息,很难帮助解决问题。
我已将您提供的字段配置毫无问题地添加到我的task manager example 的本地副本中。
import { list } from '@keystone-6/core';
import { allowAll } from '@keystone-6/core/access';
import { checkbox, relationship, text, timestamp } from '@keystone-6/core/fields';
import { select } from '@keystone-6/core/fields';
export const lists = {
Task: list({
access: allowAll,
fields: {
label: text({ validation: { isRequired: true } }),
// Test field ⬇️
checkbox_field: checkbox({
label: 'Checkbox Field',
access: { read: () => true, update: () => true }
}),
// .. other fields
},
}),
.. other lists
};
我已将 db.useMigrations 设置为 true,因此当我重新启动应用程序时,系统会提示我创建并命名将添加该列的迁移。结果 SQL 如下。这适用于 PostgreSQL,但它应该适用于其他数据库提供者。
-- AlterTable
ALTER TABLE "Task" ADD COLUMN "checkbox_field" BOOLEAN NOT NULL DEFAULT false;
这将向数据库添加一个不可为空的列,并将默认值应用于任何现有记录(因此不应有任何“阻止”此迁移应用)。
为简单起见,Keystone Checkbox field type 不支持 DB 字段本身可为空,尽管它确实为您提供了一些选项来控制 GraphQL 类型的可空性,即:graphql.read.isNonNull 和 graphql.create.isNonNull。这允许这样的用例:由于访问控制,值可能作为 null 返回,或者作为 null 传递给创建但由于默认值或正在配置的挂钩而与值一起保存。