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

Postgraphile中能否生成单向假外键关联而非双向?

Postgraphile中限制Postgres视图假外键关联为单向的实现方案

可以实现单向关联,核心可通过@behavior指令控制,也能用自定义插件过滤,具体方案如下:

方法一:使用@behavior指令禁用反向关联

在定义假外键的视图注释中,添加@behavior指令并指定omit选项,直接忽略自动生成的反向关联字段:

  1. 先查看当前生成的GraphQL Schema,找到目标视图上的反向关联字段名(通常格式为[目标视图名]To[源视图名]或带Connection的复数形式,比如targetViewToSourceView、sourceViewConnection)。
  2. 在源视图的注释中添加@behavior配置:
COMMENT ON VIEW source_view IS E'
@foreignKey (target_id) references target_view(id)
@behavior omit:["targetViewToSourceView", "sourceViewConnection"]
';

数组参数里填写你要禁用的反向关联字段名,精准匹配即可移除对应的双向关联。

方法二:自定义Postgraphile插件移除反向关联

如果@behavior的配置不够灵活,还可以编写简单插件在Schema构建阶段删除不需要的字段:

module.exports = function DisableReverseAssociationPlugin(builder) {
  builder.hook("GraphQLObjectType:fields", (fields, build, context) => {
    const { Self } = context;
    // 针对目标视图,删除反向关联的字段
    if (Self.name === "TargetView") {
      // 根据实际生成的字段名调整
      delete fields["sourceView"];
      delete fields["sourceViewConnection"];
    }
    return fields;
  });
};

启动Postgraphile时通过--plugins参数加载该插件即可生效。

注意事项

  • 字段名必须和GraphQL Schema中自动生成的完全一致,区分大小写和驼峰格式;
  • @behavior的omit支持批量移除多个字段,适合快速配置;
  • 插件方案更灵活,适合复杂场景下的关联控制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:08:13