Firebase DataConnect是否支持一对一嵌套插入?附操作示例
DataConnect一对一嵌套插入支持说明及正确实现方式
DataConnect支持一对一关联的嵌套插入,你的操作失败是因为schema定义和mutation语法存在问题,以下是具体修正方案:
问题根源
Schema缺失必要配置:
- 所有
@table标注的类型必须定义主键字段(@id),这是DataConnect的强制要求,你原schema未设置主键。 - 未通过
@relation指令明确Product与LocalizedString的一对一关联关系,也没有定义外键字段存储关联关系。
- 所有
Mutation语法错误:
嵌套插入的正确格式不是直接调用子表的_insert方法,而是通过关联字段的create嵌套对象传入子表数据。
修正后的Schema
type Product @table { id: ID @id @default(uuid()) # 主键字段,必填 name: LocalizedString @relation(fields: [nameId], references: [id]) nameId: ID # 外键字段,关联LocalizedString的主键 } type LocalizedString @table { id: ID @id @default(uuid()) # 主键字段,必填 enUS: String frFR: String product: Product? # 可选反向关联,按需添加 }
正确的嵌套插入Mutation
mutation CreateProduct { product_insert( data: { name: { create: { enUS: "MyProduct" frFR: "MonProduit" } } } ) { id name { id enUS frFR } } }
核心说明
- 必须用
@relation指令声明关联关系,同时定义外键字段(如nameId)来维护两张表的关联。 - 嵌套插入时,通过
关联字段名: { create: { ...子表数据 } }的格式,即可在一次操作中完成主表和子表的数据插入。 - 若不修正schema和语法,确实需要分两次操作:先插入
LocalizedString获取其ID,再插入Product并关联该ID,但通过正确配置可实现单次操作完成。
内容的提问来源于stack exchange,提问作者Anthony Bobenrieth
相关产品推荐
相关产品推荐

