Postgraphile中能否生成单向假外键关联而非双向?
Postgraphile中限制Postgres视图假外键关联为单向的实现方案
可以实现单向关联,核心可通过@behavior指令控制,也能用自定义插件过滤,具体方案如下:
方法一:使用@behavior指令禁用反向关联
在定义假外键的视图注释中,添加@behavior指令并指定omit选项,直接忽略自动生成的反向关联字段:
- 先查看当前生成的GraphQL Schema,找到目标视图上的反向关联字段名(通常格式为
[目标视图名]To[源视图名]或带Connection的复数形式,比如targetViewToSourceView、sourceViewConnection)。 - 在源视图的注释中添加
@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
相关产品推荐
相关产品推荐

