如何在水线中的主键上对一对一关系进行建模



我有一对表(MySQL,如果你好奇的话),其中一个是主表,一个是辅助表,其PK是第一个的FK-它们共享一对一的关系。

我已经充分定义了这两个表,但是当我尝试定义主表的模型以引用辅助表时,我遇到了麻烦。具体来说,所有执行/this/的尝试都失败了:

/* existing primary key defined, works okay */
id: {
    columnName: 'KeyID',
    type: 'integer',
    primaryKey: 'true',
    autoIncrement: 'true'
},
/* adding this ruins everything */
moreData: {
    columnName: 'KeyID',
    model: 'extraData'
}

运行它会看到 ORM/return/但结果很奇怪且损坏,KeyID 是 moreData 应该是什么的副本,而 moreData 是一个带有数据库字段且未正确重命名属性的奇怪数组。排除列名称会导致查询失败,因为 moreData 不在主表的字段列表中。

我的做法不正确吗?

如果我

理解不正确,请告诉我。似乎您拥有的是两个模型,PrimaryData 和 ExtraData,它们应该处于一对一的关系中。是吗?

如果是这样,我将按如下方式进行设置:

//PrimaryData.js
module.exports = {
  attributes: {
    id: {
      column: 'KeyID',
      type: 'integer',
      primaryKey: true,
      autoIncrement: true
    },
    extraData: {
      column: 'ExtraKeyID',
      model: 'ExtraData'
    }
  }
}
//ExtraData.js
module.exports = {
  attributes: {
    id: {
      column: 'KeyID',
      type: 'integer',
      primaryKey: true,
      autoIncrement: true
    },
    primaryData: {
      column: 'PrimaryKeyID',
      model: 'PrimaryData'
    }
  }
}

这将在两个数据模型之间建立一对一的关系。

请注意,水线中的一对一关系当前不会在两个表中自动更新。

https://github.com/balderdashy/waterline/issues/360

因此,根据您的需要,您可以将其更改为一对多关系。

如果 ExtraData 真的只是 PrimaryData 的

扩展,并且永远不会单独使用,那么一对一可能是要走的路,你甚至不需要在 ExtraData 模型中返回 PrimaryData 的指针。

//ExtraData.js
module.exports = {
  attributes: {
    id: {
      column: 'KeyID',
      type: 'integer',
      primaryKey: true,
      autoIncrement: true
    },
  }
}

希望我正确理解了您的问题,并且这有所帮助。

最新更新