【问题标题】:How can I model a one-to-one relationship on a primary key in Waterline?如何在 Waterline 中的主键上建立一对一关系?
【发布时间】:2015-03-10 20:32:36
【问题描述】:

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

我是不是处理错了?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 不幸的是,CTC,不完全是——该表在 /primary key/ 上是一对一的。您已经假定存在“ExtraKeyID”,但它从未存在过——第二个表是第一个表的扩展,并由 KeyID 键控。多次使用同一列的尝试似乎使 Waterline 不稳定,我正在尝试确定我是否对它进行了错误的建模,或者 Waterline 不会发挥作用。 (我可以分别实例化两个对象,也许我必须这样做,但我可以用 ORM 做的所有事情我都想做。)但是感谢您尝试一下!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多