如何在Waterline中的主键上建模一对一关系?

时间:2015-03-10 20:32:37

标签: orm sails.js one-to-one waterline

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

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

/* 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是一个带有DB字段的奇怪数组,并且没有正确地重命名属性。排除columnName会导致查询失败,因为moreData不在主表的字段列表中。

我接近这个错误吗?

1 个答案:

答案 0 :(得分:0)

如果我没有正确理解这一点,请告诉我。看来你所拥有的是两个模型,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'
    }
  }
}

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

请注意,Waterline中的一对一关系目前未在两个表中自动更新。

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
    },
  }
}

希望我能正确理解你的问题并且这会有所帮助。