【问题标题】:Keystone 6 js: checkbox null valuesKeystone 6 js:复选框空值
【发布时间】:2022-11-22 10:50:58
【问题描述】:

Keystone js 6 不允许我添加复选框字段,看起来如下所示

// checkbox_field: checkbox({ label: 'Checkbox Field', access: { read: ()=> true, update: ()=> true } }),

我假设这是因为我在 db 中有一些空值,因为我在文本类型字段中遇到了同样的问题,使用 db.isNullable === true 很容易解决这个问题。但是,我找不到复选框字段类型的类似选项。

我尝试使用 defaultValue 选项和 db.map,但没有帮助

【问题讨论】:

    标签: keystonejs keystone keystonejs6


    【解决方案1】:

    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.isNonNullgraphql.create.isNonNull。这允许这样的用例:由于访问控制,值可能作为 null 返回,或者作为 null 传递给创建但由于默认值或正在配置的挂钩而与值一起保存。

    【讨论】:

      猜你喜欢
      • 2022-08-07
      • 2020-12-20
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 2017-01-06
      • 2022-07-11
      相关资源
      最近更新 更多