You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Dataconnect:使用隐式突变时如何返回更多数据?

问题描述

我在Schema中定义了如下Organization表类型:

type Organization @table {
    id: UUID! @default(expr: "uuidV4()")
    slug: String! @col(dataType: "varchar(255)") @unique @index
    name: String! @col(dataType: "varchar(200)")
    logo: String
    createdAt: Date! @default(expr: "request.time")
    updatedAt: Date! @default(expr: "request.time")
    owner: User!
}

使用以下mutation创建新记录:

mutation CreateOrganization($name: String!, $slug: String, $logo: String)
@auth(level: USER) {
    organization_insert(
        data: {
            name: $name
            slug: $slug
            ownerId_expr: "auth.uid"
            logo: $logo
        }
    )
}

但自动生成的dataconnect/.dataconnect/schema/main/mutation.gql中,该mutation仅返回id:

"""
  ✨ Insert a single `Organization` into the table. Columns not specified in `data` will receive defaults (e.g. `null`).
  """
  organization_insert(
    """
    Data object to insert into the table.
    """
    data: Organization_Data!
  ): Organization_KeyOutput! @fdc_generated(from: "Organization", purpose: INSERT_SINGLE)

我希望这个mutation能返回除id外的更多字段(比如slug),不想创建后再额外查询,有没有更好的实现方法?

解决方案

有几种实用方法能实现需求,无需额外查询:

1. 自定义mutation替换自动生成版本

直接在自己的Schema里定义自定义mutation,指定返回完整的Organization类型,绕开自动生成的仅返回id的版本。示例代码:

mutation CreateOrganization($name: String!, $slug: String, $logo: String)
@auth(level: USER)
@sql(
  statement: """
  INSERT INTO "Organization" ("name", "slug", "ownerId", "logo", "createdAt", "updatedAt")
  VALUES ($name, $slug, auth.uid(), $logo, request.time(), request.time())
  RETURNING "id", "slug", "name", "logo", "createdAt", "updatedAt"
  """
) {
  organization_insert: Organization!
}

通过@sql注解直接编写带RETURNING子句的SQL,把需要的字段都列在RETURNING后,mutation执行后就能一次性拿到所有目标数据。

2. 自定义输出类型覆盖默认(需版本支持)

如果你的Data Connect版本支持,可自定义包含所需字段的输出类型,让mutation返回该类型:

# 定义包含所有需要字段的输出类型
type Organization_FullOutput {
  id: UUID!
  slug: String!
  name: String!
  logo: String
  createdAt: Date!
  updatedAt: Date!
}

# 修改mutation,指定使用自定义输出类型
mutation CreateOrganization($name: String!, $slug: String, $logo: String)
@auth(level: USER)
@fdc_generated(from: "Organization", purpose: INSERT_SINGLE, outputType: "Organization_FullOutput") {
  organization_insert(
    data: {
      name: $name
      slug: $slug
      ownerId_expr: "auth.uid"
      logo: $logo
    }
  ): Organization_FullOutput!
}

注意:这种方法依赖Data Connect版本是否支持outputType注解参数,不支持的话还是用自定义SQL更稳妥。

3. 配置表的默认返回字段(需查工具文档)

部分Data Connect工具允许在表类型定义时配置默认返回字段,可尝试在@table注解中添加相关参数,让自动生成的insert mutation默认返回更多字段。不过这个需要查阅对应工具的官方文档确认是否支持。

内容的提问来源于stack exchange,提问作者codercatdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:50:11