#10489·nocobase

NocoBase Skill 使用通用 o2o 创建反向一对一字段时,可能导致关联方向错误

Author: Roc-kitCreated Sep 9, 2026Updated Sep 11, 2026

环境

  • NocoBase:2.2.6
  • 使用 NocoBase 官方 Skill 进行数据模型创建
  • 涉及一对一关联字段

问题描述

我们在使用 NocoBase 官方 Skill 创建一对一关联关系时,遇到了关联方向被创建错误的问题。

按照 Skill 中关于一对一关系的说明和示例创建字段时,反向字段使用了通用的:

json
{
  "interface": "o2o"
}

实际创建完成后发现,一对一关系的方向与预期不一致,外键所在侧也发生了错误。

进一步检查 NocoBase 2.2.6 实际运行时源码后发现,一对一关系实际上已经明确区分为:

obo = belongsTo
oho = hasOne

两者的反向关系也应明确对应:

obo -> reverseField: oho
oho -> reverseField: obo

例如,如果 A 表保存 B 的外键,预期关系应为:

A -> B:obo / belongsTo
B -> A:oho / hasOne

但当前 Skill 的一对一示例中,仍存在类似:

json
{
  "name": "profile",
  "interface": "m2o",
  "target": "profiles",
  "foreignKey": "profileId",
  "reverseField": {
    "name": "user",
    "interface": "o2o"
  }
}

这种写法。

在我们的实际使用中,Agent 根据该规则生成关联字段后,反向字段方向被创建错误;将关系改为明确的 obo / oho 后,关系方向才与预期一致。

期望行为

对于一对一关联,希望官方 Skill 明确使用:

obo = belongsTo
oho = hasOne

而不是在需要明确方向的地方使用通用 o2o

例如:

json
{
  "name": "profile",
  "interface": "obo",
  "target": "profiles",
  "foreignKey": "profileId",
  "reverseField": {
    "name": "user",
    "interface": "oho"
  }
}

建议

建议检查并修改 nocobase-data-modeling Skill 中关于 one-to-one 的说明和示例,尤其是:

  • relations/o2o.md
  • relation-fields.md

明确区分 obo / belongsTooho / hasOne,并避免让 Agent 依赖通用 o2o 自动判断一对一关系方向。

这个问题对于 AI Agent 自动创建 Collection / Field 时影响比较明显,因为方向判断错误后会直接导致实际数据模型中的外键位置和关联关系错误。