在Loopback中实现类表继承

时间:2016-10-06 04:07:00

标签: javascript inheritance loopbackjs

我正在尝试在Loopback模型中实现子类,其中我有一个父表,其中包含公共字段和表,这些表是具有特定字段的父表的子项。

一个实际的例子:

Customer

包含适用于个人和组织的字段的模型

  • internal_id
  • created

Person

仅包含人员特定字段的模型

  • first_name
  • last_name

Organisation

仅包含特定于组织的字段的模型

  • registration_number
  • trade_name

基本上Person继承自Customer,而Organisation也继承自Customer

我已按照Extending Models的本指南在Person型号上创建OrganisationCustomer型号

但是,当我在Person创建POST时,即通过http://0.0.0:3000/persons时,他会在Person表格中创建,但不会在Customer表格中创建。

我假设当我基于另一个模型扩展模型时,在保存extendee模型时,它还会将公共字段保存到父模型中。

似乎并非如此。我怎样才能在Loopback中实现这个目标?

如果需要它们,请使用模型jsons:

customer.json

{
  "name": "Organisation",
  "plural": "Organisations",
  "base": "Customer",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "registration_number": {
      "type": "string",
      "required": true
    },
    "trade_name": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {},
  "acls": [],
  "methods": {}
}

person.json

{
  "name": "Person",
  "plural": "Persons",
  "base": "Customer",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "first_name": {
      "type": "string",
      "required": true
    },
    "last_name": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {},
  "acls": [],
  "methods": {}
}

organisation.json

{
  "name": "Organisation",
  "plural": "Organisations",
  "base": "Customer",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "registration_number": {
      "type": "string",
      "required": true
    },
    "trade_name": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {},
  "acls": [],
  "methods": {}
}

1 个答案:

答案 0 :(得分:1)

Loopback不提供这种类型的继承。模型只是模板,扩展模型只是创建一个新模板,其中包含从继承模型中获取的属性/方法。

我知道您想要抽象客户是个人还是组织。这看起来像是polymorphic relations的典型用例。多态关系允许您将一个模型与其他几个模型相关联。

以下是我将如何构建应用程序:

customer.js

{
  "name": "Customer",
  // ...
  "relations": {
    "customerable": {
      "type": "belongsTo",
      "polymorphic": true
    }
  }, // ...
}

person.js

{
  "name": "Person",
  // ...
  "relations": {
    "customer": {
      "type": "hasOne",
      "model": "Customer",
      "polymorphic": {"as": "customerable", "discriminator": "person"}
    }
  }, // ...
}

organization.js

{
  "name": "Organization",
  // ...
  "relations": {
    "orders": {
      "type": "hasOne",
      "model": "Customer",
      "polymorphic": {"as": "customerable", "discriminator": "organization"} 
    }
  }, // ...
}

我使用this example因为环回文档不是很清楚