【问题标题】:Inheritance in Waterline ORMWaterline ORM 中的继承
【发布时间】:2015-09-30 20:52:16
【问题描述】:

Waterline ORM 是否支持继承?假设我有一个名为BusinessDocument 的模型,我想创建一个名为SalesOrder 的新模型,它扩展BusinessDocument。所以,SalesOrder 最终应该拥有BusinessDocument 的所有属性以及一些新属性。 Waterline 支持吗?

【问题讨论】:

    标签: javascript node.js inheritance waterline


    【解决方案1】:

    Waterline 似乎不支持开箱即用。看到这个GitHub issue

    上述问题中的一个 cmets 还链接到 YouTube (here) 上的一个sailscast 视频。简而言之,视频通过使用 lodashmerge 子模型和基本模型,如下所示:

    baseModel.js

    module.exports = {
      attributes : {
        name : 'STRING',
        age  : 'INTEGER'
      },
      foo : function () {}
    }
    

    childModel.js

    var baseModel = require('/path/to/baseModel')
      , _ = require('lodash')
    
    module.exports = _.merge(baseModel, {
      attributes : {
        birthDate : 'DATE',
        ...
      }
    })
    

    【讨论】:

    • 唯一的问题是它实际上创建了一个 baseModel 集合和 childModel 集合,因此无法执行 BaseModel.find() 并获取 childmodel 记录。它可以通过添加tableName:"baseModel" 来解决,但并非所有适配器都支持。
    • 是的。您最终可能不得不分别在每个子模型上调用 find
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 2017-12-16
    • 2023-01-26
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多